arduino-audio-tools
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
FilteredDelay< effectsuite_t > Class Template Reference

Delay effect that filters the repeat delay. More...

#include <AudioEffectsSuite.h>

Inheritance diagram for FilteredDelay< effectsuite_t >:
DelayEffectBase< effectsuite_t > FilterEffectBase< effectsuite_t > EffectSuiteBase< effectsuite_t > AudioEffect

Public Member Functions

 FilteredDelay (FilteredDelay &copy)=default
 
 FilteredDelay (int delayInSamples, int sample_rate=44100)
 
 ~FilteredDelay ()=default
 
virtual bool active ()
 determines if the effect is active
 
virtual effectsuite_t applyFilter (effectsuite_t sampVal)
 
FilteredDelayclone () override
 
effectsuite_t envelope (effectsuite_t sample)
 
int id ()
 Allows to identify an effect.
 
effect_t process (effect_t inputSample) override
 see applyFilter
 
effectsuite_t processFloat (effectsuite_t inputSample) override
 
virtual void setActive (bool value)
 sets the effect active/inactive
 
bool setChebyICoefficients (effectsuite_t cutFreqIn, bool shelfType, effectsuite_t rippleIn)
 
void setDelayGain (effectsuite_t gain)
 
void setFeedbackGain (effectsuite_t gain)
 
void setId (int id)
 Allows to identify an effect.
 
void setupDelayEffectBase (const int bufferSizeSamples)
 

Protected Member Functions

void allocateBufferMemory ()
 
void capGain (effectsuite_t &gain)
 
bool changeChebyICoefficients (effectsuite_t cutFreq, bool shelfType, effectsuite_t ripple, int poles)
 
void clearMemory ()
 
int16_t clip (int32_t in, int16_t clipLimit=32767, int16_t resultLimit=32767)
 generic clipping method
 
void copyParent (AudioEffect *copy)
 
void delaySample (effectsuite_t inputSample)
 
effectsuite_t getInterpolatedOut (effectsuite_t bufferIndex)
 
void incBufferIndex ()
 
void incDelayBuffReadIndex (effectsuite_t indexInc)
 
void incDelayBuffWriteIndex ()
 
effectsuite_t rms (effectsuite_t sample)
 
bool setDelayBuffer (int bufferSizeSamples)
 
void setDelayBuffReadIndex (effectsuite_t index)
 
bool setSimpleLpf (int order)
 
void storeSample (effectsuite_t inputSample)
 

Static Protected Member Functions

static effectsuite_t ** setInterpolationTable ()
 

Protected Attributes

bool active_flag = true
 
int bufferIndex = 0
 
effectsuite_t currentDelayReadIndex = 0
 
int currentDelayWriteIndex = 0
 
effectsuite_t * delayBuffer = 0
 
effectsuite_t delayGain = .707
 
int delayTimeSamples = 44100
 
bool error
 
effectsuite_t feedbackGain = 0.0
 
int filterOrder = 0
 
float * firBuffer = 0
 
float * firCoefficients = 0
 
float * firTemp = 0
 
int id_value = -1
 
float * iirBuffer = 0
 
float * iirCoefficients = 0
 
float * iirTemp = 0
 
int maxDelayBufferSize = 441000
 
effectsuite_t * rmsBuffer = new effectsuite_t[rmsWindowSize]
 
int rmsBufferIndex = 0
 
const int rmsWindowSize = 128
 
int samplingRate = 0
 

Static Protected Attributes

static effectsuite_t ** interpolationTable = nullptr
 Table of interpolation values as a 2D array indexed by interpolationTable[pointIndex][alphaIndex]. One instance per DelayEffectBase<effectsuite_t> instantiation (previously a single namespace-scope global shared – and type-mismatched – across every effectsuite_t choice).
 
static const int interpOrder = 4
 
static const int interpResolution = 1000
 

Detailed Description

template<typename effectsuite_t = effectsuite_t_default>
class audio_tools::FilteredDelay< effectsuite_t >

Delay effect that filters the repeat delay.

Author
Matthew Hamilton

Constructor & Destructor Documentation

◆ FilteredDelay() [1/2]

template<typename effectsuite_t = effectsuite_t_default>
FilteredDelay ( int  delayInSamples,
int  sample_rate = 44100 
)
inline

Constructor

◆ FilteredDelay() [2/2]

template<typename effectsuite_t = effectsuite_t_default>
FilteredDelay ( FilteredDelay< effectsuite_t > &  copy)
default

◆ ~FilteredDelay()

template<typename effectsuite_t = effectsuite_t_default>
~FilteredDelay ( )
default

Destructor

Member Function Documentation

◆ active()

virtual bool active ( )
inlinevirtualinherited

determines if the effect is active

◆ allocateBufferMemory()

template<typename effectsuite_t = effectsuite_t_default>
void allocateBufferMemory ( )
inlineprotectedinherited

will allocate memory to a buffer given the current filter order and set all values == 0.00

◆ applyFilter()

template<typename effectsuite_t = effectsuite_t_default>
virtual effectsuite_t applyFilter ( effectsuite_t  sampVal)
inlinevirtualinherited

with the current filter coefficients this method filters a sample then stores it the sample Buffer and increments the index

Parameters
sampValis the sample to be processed
Returns
filtered audio sample

◆ capGain()

template<typename effectsuite_t = effectsuite_t_default>
void capGain ( effectsuite_t &  gain)
inlineprotected

capGain: caps gain to a range of 1 and -1;

Parameters
gainaddress of gain value

◆ changeChebyICoefficients()

template<typename effectsuite_t = effectsuite_t_default>
bool changeChebyICoefficients ( effectsuite_t  cutFreq,
bool  shelfType,
effectsuite_t  ripple,
int  poles 
)
inlineprotectedinherited

set firCoefficients and iirCoefficients for required chebyshev type I filter sampleBuffer memory is also set @params cutFreq normalised cutoff frequency (0 < x < .5) @params shelfType bool filter shelf type, false = low pass, true = high pass @params ripple percentage ripple (<.2929) @params poles number of poles

Returns
boolean false on error and true on success

◆ clearMemory()

template<typename effectsuite_t = effectsuite_t_default>
void clearMemory ( )
inlineprotectedinherited

checks internal memory storage of filter coeffcients and deletes if required

◆ clip()

int16_t clip ( int32_t  in,
int16_t  clipLimit = 32767,
int16_t  resultLimit = 32767 
)
inlineprotectedinherited

generic clipping method

◆ clone()

template<typename effectsuite_t = effectsuite_t_default>
FilteredDelay * clone ( )
inlineoverridevirtual

Implements AudioEffect.

◆ copyParent()

void copyParent ( AudioEffect copy)
inlineprotectedinherited

◆ delaySample()

template<typename effectsuite_t = effectsuite_t_default>
void delaySample ( effectsuite_t  inputSample)
inlineprotectedinherited

store input sample into the delay buffer and increment currentDelayWriteIndex for tracking when to loop back to start of buffer

Parameters
inputSamplesample to be stored for delay (effectsuite_t)

◆ envelope()

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t envelope ( effectsuite_t  sample)
inlineinherited

detect the envelop of an incoming signal

Parameters
samplethe incoming signal sample value
Returns
returns envelope dection signal sample value

◆ getInterpolatedOut()

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t getInterpolatedOut ( effectsuite_t  bufferIndex)
inlineprotectedinherited

get the value of the requested buffer index by interpolating other points

Parameters
bufferIndexThe required buffer index
Returns
interpolated output

◆ id()

int id ( )
inlineinherited

Allows to identify an effect.

◆ incBufferIndex()

template<typename effectsuite_t = effectsuite_t_default>
void incBufferIndex ( )
inlineprotectedinherited

increment the buffer index and wrap it to the filter order

◆ incDelayBuffReadIndex()

template<typename effectsuite_t = effectsuite_t_default>
void incDelayBuffReadIndex ( effectsuite_t  indexInc)
inlineprotectedinherited

Increments the currentDelayBufferReadIndex by indexInc

Parameters
indexIncThe amount to increment the delay buffer index

◆ incDelayBuffWriteIndex()

template<typename effectsuite_t = effectsuite_t_default>
void incDelayBuffWriteIndex ( )
inlineprotectedinherited

Increments the currentDelayWriteBufferIndex by 1

◆ process()

template<typename effectsuite_t = effectsuite_t_default>
effect_t process ( effect_t  inputSample)
inlineoverridevirtual

see applyFilter

Reimplemented from FilterEffectBase< effectsuite_t >.

◆ processFloat()

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t processFloat ( effectsuite_t  inputSample)
inlineoverridevirtual

apply the DSP effect

Reimplemented from FilterEffectBase< effectsuite_t >.

◆ rms()

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t rms ( effectsuite_t  sample)
inlineprotectedinherited

root mean square of signal over a specific sample window

◆ setActive()

virtual void setActive ( bool  value)
inlinevirtualinherited

sets the effect active/inactive

◆ setChebyICoefficients()

template<typename effectsuite_t = effectsuite_t_default>
bool setChebyICoefficients ( effectsuite_t  cutFreqIn,
bool  shelfType,
effectsuite_t  rippleIn 
)
inlineinherited

changes the current Chebyshev type 1 coefficients without altering the filter order. This allows for use in an audio process thread as it avoids dynamic allocation of memory. Filter sample and coefficient buffers are unaltered for initialising a chebyshev type 1 filter

See also
setChebyICoefficients @params cutFreq normalised cutoff frequency (0 < x < .5) @params shelfType bool Filters shelf type, false = low pass, true = high pass @params ripple percentage ripple (<.2929)
Returns
boolean false on error and true on success

◆ setDelayBuffer()

template<typename effectsuite_t = effectsuite_t_default>
bool setDelayBuffer ( int  bufferSizeSamples)
inlineprotectedinherited

Allocates memory for delay buffer and initialises all elements to 0

Parameters
bufferSizeSamplesthe size of delay buffer to be used
Returns
false and error description if there's a problem, or sets the internal delay buffer and returns true

◆ setDelayBuffReadIndex()

template<typename effectsuite_t = effectsuite_t_default>
void setDelayBuffReadIndex ( effectsuite_t  index)
inlineprotectedinherited

sets the currentDelayBufferReadIndex by indexInc (Currently no wrapping)

Parameters
indexthe read index index required

◆ setDelayGain()

template<typename effectsuite_t = effectsuite_t_default>
void setDelayGain ( effectsuite_t  gain)
inline

setDelayGain: sets the delay gain to a value between 1 and -1

Parameters
gainrequireddelay gain. Values beyond 1 and -1 are capped to the maximum to avoid idiocy. Negative velus invoke a phase inversion.
See also
setFeedbackGain

◆ setFeedbackGain()

template<typename effectsuite_t = effectsuite_t_default>
void setFeedbackGain ( effectsuite_t  gain)
inline

setDelayGain: sets the feedback gain to a value between 1 and -1

Parameters
gainrequired delay gain. Values beyond 1 and -1 are capped to the maximum to avoid idiocy. Negative velus invoke a phase inversion.
See also
setDelayGain

◆ setId()

void setId ( int  id)
inlineinherited

Allows to identify an effect.

◆ setInterpolationTable()

template<typename effectsuite_t = effectsuite_t_default>
static effectsuite_t ** setInterpolationTable ( )
inlinestaticprotectedinherited

Sets the internal lagrange interpolation table. Ideally it should be shared amongst all

Returns
false and an error description if there's a problem, or sets the interpolation lookup table and returns true

◆ setSimpleLpf()

template<typename effectsuite_t = effectsuite_t_default>
bool setSimpleLpf ( int  order)
inlineprotectedinherited

a simple normalised fir low pass filter @params order number of delay coefficients

◆ setupDelayEffectBase()

template<typename effectsuite_t = effectsuite_t_default>
void setupDelayEffectBase ( const int  bufferSizeSamples)
inlineinherited

<Description#>

Parameters
bufferSizeSamples<#bufferSizeSamples description#>

◆ storeSample()

template<typename effectsuite_t = effectsuite_t_default>
void storeSample ( effectsuite_t  inputSample)
inlineprotectedinherited

store input sample into the delay buffer

Parameters
inputSamplesample to be stored for delay (effectsuite_t)

Member Data Documentation

◆ active_flag

bool active_flag = true
protectedinherited

◆ bufferIndex

template<typename effectsuite_t = effectsuite_t_default>
int bufferIndex = 0
protectedinherited

current buffer index

◆ currentDelayReadIndex

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t currentDelayReadIndex = 0
protectedinherited

◆ currentDelayWriteIndex

template<typename effectsuite_t = effectsuite_t_default>
int currentDelayWriteIndex = 0
protectedinherited

◆ delayBuffer

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t* delayBuffer = 0
protectedinherited

buffer to stored audio buffer for delay effects

◆ delayGain

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t delayGain = .707
protected

◆ delayTimeSamples

template<typename effectsuite_t = effectsuite_t_default>
int delayTimeSamples = 44100
protectedinherited

the delay time of signal in samples

◆ error

template<typename effectsuite_t = effectsuite_t_default>
bool error
protectedinherited

internal class error boolean

◆ feedbackGain

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t feedbackGain = 0.0
protected

◆ filterOrder

template<typename effectsuite_t = effectsuite_t_default>
int filterOrder = 0
protectedinherited

order of delay filter including the zero delay coefficients

◆ firBuffer

template<typename effectsuite_t = effectsuite_t_default>
float* firBuffer = 0
protectedinherited

buffer to hold forward delay sample data

◆ firCoefficients

template<typename effectsuite_t = effectsuite_t_default>
float* firCoefficients = 0
protectedinherited

Numerator coefficients in delay filter firCoefficients[0] z^0 coeffcieint firCoefficients[1] z^-1 coefficient

◆ firTemp

template<typename effectsuite_t = effectsuite_t_default>
float* firTemp = 0
protectedinherited

hold temporary values for fir coeffcient buffer

◆ id_value

int id_value = -1
protectedinherited

◆ iirBuffer

template<typename effectsuite_t = effectsuite_t_default>
float* iirBuffer = 0
protectedinherited

buffer to hold backward delay sample data

◆ iirCoefficients

template<typename effectsuite_t = effectsuite_t_default>
float* iirCoefficients = 0
protectedinherited

Denomiator coefficients in delay filter

See also
firCoefficients

◆ iirTemp

template<typename effectsuite_t = effectsuite_t_default>
float* iirTemp = 0
protectedinherited

hold temporary values for iir coeffcient buffer

◆ interpolationTable

template<typename effectsuite_t >
effectsuite_t ** interpolationTable = nullptr
staticprotectedinherited

Table of interpolation values as a 2D array indexed by interpolationTable[pointIndex][alphaIndex]. One instance per DelayEffectBase<effectsuite_t> instantiation (previously a single namespace-scope global shared – and type-mismatched – across every effectsuite_t choice).

◆ interpOrder

template<typename effectsuite_t = effectsuite_t_default>
const int interpOrder = 4
staticprotectedinherited

◆ interpResolution

template<typename effectsuite_t = effectsuite_t_default>
const int interpResolution = 1000
staticprotectedinherited

◆ maxDelayBufferSize

template<typename effectsuite_t = effectsuite_t_default>
int maxDelayBufferSize = 441000
protectedinherited

Maximum number of samples that can be stored in delayBuffer

◆ rmsBuffer

template<typename effectsuite_t = effectsuite_t_default>
effectsuite_t* rmsBuffer = new effectsuite_t[rmsWindowSize]
protectedinherited

RMS window buffer

◆ rmsBufferIndex

template<typename effectsuite_t = effectsuite_t_default>
int rmsBufferIndex = 0
protectedinherited

current write index of rmsBuffer

◆ rmsWindowSize

template<typename effectsuite_t = effectsuite_t_default>
const int rmsWindowSize = 128
protectedinherited

window size in samples of rms window

◆ samplingRate

template<typename effectsuite_t = effectsuite_t_default>
int samplingRate = 0
protectedinherited

The documentation for this class was generated from the following file: