filters

package
v0.0.0-...-486f928 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 14, 2022 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Filters take samples as an input and produce samples as an output.

Index

Constants

View Source
const MaxInt int = (1<<bits.UintSize)/2 - 1

Variables

This section is empty.

Functions

func BandPassConvolution

func BandPassConvolution(sampleRate, lowest, highest float64, order int) []float64

Order should be odd.

func Delay

func Delay(s, factor, feedback float64, ring *ring.Ring) float64

func HighPassConvolution

func HighPassConvolution(sampleRate, cutoff float64, order int) []float64

Order should be odd.

func LowPassConvolution

func LowPassConvolution(sampleRate, cutoff float64, order int) []float64

Order should be odd.

Types

type BandPassConvolutionFilter

type BandPassConvolutionFilter struct {
	// The lowest frequency to be included, in Hz.
	Lowest float64

	// The Highest frequency to be included, in Hz.
	Highest float64

	// The order of the filter. Should be odd.
	// The order can't be changed once set without resetting the convolution
	// filter.
	Order int

	// The underlying SimpleConvolutionFilter used.
	ConvolutionFilter *SimpleConvolutionFilter
}

A FIR band pass filter.

func NewBandPassConvolutionFilter

func NewBandPassConvolutionFilter(lowest, highest float64, order int) *BandPassConvolutionFilter

func (*BandPassConvolutionFilter) Filter

func (f *BandPassConvolutionFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type BaseFilter

type BaseFilter struct {
	FilterFunc func(cfg *audio.AudioConfig, samples []float64) []float64
}

func (*BaseFilter) Filter

func (f *BaseFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type DelayFilter

type DelayFilter struct {
	LeftTime      float64
	LeftFactor    float64
	LeftFeedback  float64
	LeftDelayed   *ring.Ring
	RightTime     float64
	RightFactor   float64
	RightFeedback float64
	RightDelayed  *ring.Ring
}

func NewDelayFilter

func NewDelayFilter(time, factor, feedback float64) *DelayFilter

func (*DelayFilter) Filter

func (f *DelayFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type DistortionFilter

type DistortionFilter struct {
	Level float64
}

func NewDistortionFilter

func NewDistortionFilter(level float64) *DistortionFilter

func (*DistortionFilter) Filter

func (f *DistortionFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type Equalizer

type Equalizer struct {
	Bands  int
	Values []float64
}

func NewEqualizer

func NewEqualizer(bands int, values []float64) *Equalizer

type Filter

type Filter interface {
	Filter(cfg *audio.AudioConfig, samples []float64) []float64
}

func AverageFilter

func AverageFilter(filters ...Filter) Filter

func ComposedFilter

func ComposedFilter(f1 Filter, f2 Filter) Filter

func MustNewSimpleConvolutionFilterFromWav

func MustNewSimpleConvolutionFilterFromWav(wav string) Filter

func NewBaseFilter

func NewBaseFilter(f func(cfg *audio.AudioConfig, samples []float64) []float64) Filter

func NewSimpleConvolutionFilterFromWav

func NewSimpleConvolutionFilterFromWav(wav string) (Filter, error)

func SumFilter

func SumFilter(filters ...Filter) Filter

type FlangerFilter

type FlangerFilter struct {
	Time    float64
	Factor  float64
	LFORate float64

	LeftDelayed  []float64
	RightDelayed []float64
	Phase        int
}

func NewFlangerFilter

func NewFlangerFilter(time, factor, rate float64) *FlangerFilter

func (*FlangerFilter) Filter

func (f *FlangerFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type HighPassConvolutionFilter

type HighPassConvolutionFilter struct {
	// The cutoff frequency, in Hz.
	Cutoff float64

	// The order of the filter. Should be odd.
	// The order can't be changed once set without resetting the convolution
	// filter.
	Order int

	// The underlying SimpleConvolutionFilter used.
	ConvolutionFilter *SimpleConvolutionFilter
}

A FIR high pass filter.

func NewHighPassConvolutionFilter

func NewHighPassConvolutionFilter(cutoff float64, order int) *HighPassConvolutionFilter

func (*HighPassConvolutionFilter) Filter

func (f *HighPassConvolutionFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type LowPassConvolutionFilter

type LowPassConvolutionFilter struct {
	Cutoff float64

	// The order of the filter. Should be odd.
	// The order can't be changed once set without resetting the convolution
	// filter.
	Order int

	// The underlying SimpleConvolutionFilter used.
	ConvolutionFilter *SimpleConvolutionFilter
}

func NewLowPassConvolutionFilter

func NewLowPassConvolutionFilter(cutoff float64, order int) *LowPassConvolutionFilter

func (*LowPassConvolutionFilter) Filter

func (f *LowPassConvolutionFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type LowPassFilter

type LowPassFilter struct {
	Cutoff        float64
	PreviousLeft  float64
	PreviousRight float64
}

Cutoff frequency = Alpha / ((1 - Alpha) * 2 * Pi * dt Alpha = 2Pi * dt * Cutoff / (2Pi * dt * Cutoff + 1)

func NewLowPassFilter

func NewLowPassFilter(cutoff float64) *LowPassFilter

func (*LowPassFilter) Filter

func (f *LowPassFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type OverdriveFilter

type OverdriveFilter struct {
	Factor float64
}

func NewOverdriveFilter

func NewOverdriveFilter(factor float64) *OverdriveFilter

func (*OverdriveFilter) Filter

func (f *OverdriveFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type SimpleConvolutionFilter

type SimpleConvolutionFilter struct {
	Coefficients   []float64
	LeftDelayLine  *ring.Ring
	RightDelayLine *ring.Ring
}

The simple convolution filter is efficient when the number of coefficients is small (on my desktop: <300), and works by multiplying the coefficients with the values in the delay line.

This filter should be appropriate for implementing low pass, high pass, band pass and band stop filters.

func NewSimpleConvolutionFilter

func NewSimpleConvolutionFilter(coefficients []float64) *SimpleConvolutionFilter

func (*SimpleConvolutionFilter) Filter

func (s *SimpleConvolutionFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

type TremeloFilter

type TremeloFilter struct {
	Rate   float64
	Factor float64
	Phase  float64
}

func NewTremeloFilter

func NewTremeloFilter(rate, factor float64) *TremeloFilter

func (*TremeloFilter) Filter

func (f *TremeloFilter) Filter(cfg *audio.AudioConfig, samples []float64) []float64

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL