arduino-audio-tools
Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
SimpleDelay Class Reference

Simple Delay effect consiting of a single tap delay with Effect Gain and feed back controls Constructor requires internal delay in samples. More...

#include <AudioEffectsSuite.h>

Inheritance diagram for SimpleDelay:
DelayEffectBase EffectSuiteBase AudioEffect

Public Member Functions

 SimpleDelay (int maxDelayInSamples=8810, int samplingRate=44100)
 
 SimpleDelay (SimpleDelay &copy)=default
 
 ~SimpleDelay ()=default
 
virtual bool active ()
 determines if the effect is active
 
SimpleDelayclone () override
 
int id ()
 Allows to identify an effect.
 
effect_t process (effect_t inputSample) override
 
effectsuite_t processDouble (effectsuite_t inputSample) override
 
virtual void setActive (bool value)
 sets the effect active/inactive
 
void setDelayGain (effectsuite_t gain)
 
void setDelayTime (effectsuite_t delayInSamples)
 
void setDelayTransitionTime (effectsuite_t seconds)
 
void setFeedbackGain (effectsuite_t gain)
 
void setId (int id)
 Allows to identify an effect.
 
void setupDelayEffectBase (const int bufferSizeSamples)
 
void setupSimpleDelay (int delayInSamples)
 

Protected Member Functions

void capGain (effectsuite_t &gain)
 
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)
 
effectsuite_t getSplineOut (effectsuite_t bufferIndex)
 
void incDelayBuffReadIndex (effectsuite_t indexInc)
 
void incDelayBuffWriteIndex ()
 
bool setDelayBuffer (int bufferSizeSamples)
 
void setDelayBuffReadIndex (effectsuite_t index)
 
void storeSample (effectsuite_t inputSample)
 

Static Protected Member Functions

static effectsuite_t ** setInterpolationTable ()
 

Protected Attributes

bool active_flag = true
 
int count = 0
 
effectsuite_t currentDelayReadIndex = 0
 
effectsuite_t currentDelaySamples
 
int currentDelayWriteIndex = 0
 
effectsuite_t * delayBuffer = 0
 
effectsuite_t delayGain = .707
 
effectsuite_t delayIncrement
 
bool delayTimeChanged = false
 
int delayTimeSamples = 44100
 
effectsuite_t delayTransitionTime
 
effectsuite_t delayTransitionTimeInSamples
 
bool error
 
effectsuite_t feedbackGain = 0.
 
int id_value = -1
 
effectsuite_t invDelayIncrement
 
int maxDelayBufferSize = 441000
 
effectsuite_t readHeadIndex
 
int sampleRate
 
effectsuite_t targetDelaySamples
 
unsigned int writeHeadIndex
 

Static Protected Attributes

static const int interpOrder = 4
 
static const int interpResolution = 1000
 

Detailed Description

Simple Delay effect consiting of a single tap delay with Effect Gain and feed back controls Constructor requires internal delay in samples.

See also
process
Author
Matthew Hamilton

Constructor & Destructor Documentation

◆ SimpleDelay()

SimpleDelay ( int  maxDelayInSamples = 8810,
int  samplingRate = 44100 
)
inline

Constructor: DigitalEffect Base Must Be initialised

Parameters
delayInSamplesSet the amount of delay in samples
See also
DelayEffectBase constructor

◆ ~SimpleDelay()

~SimpleDelay ( )
default

Destructor.

Member Function Documentation

◆ capGain()

void capGain ( effectsuite_t &  gain)
inlineprotected

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

Parameters
gainaddress of gain value

◆ delaySample()

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)

◆ getInterpolatedOut()

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

◆ getSplineOut()

effectsuite_t getSplineOut ( effectsuite_t  bufferIndex)
inlineprotected

get a cubic spline interpolated out from the wave table Derived from code by Alec Wright at repository: https://github.com/Alec-Wright/Chorus

Authors
Matthew Hamilton, Alec Wright
Parameters
bufferIndexthe required buffer index
Returns
returns interpolated value as effectsuite_t

◆ incDelayBuffReadIndex()

void incDelayBuffReadIndex ( effectsuite_t  indexInc)
inlineprotectedinherited

Increments the currentDelayBufferReadIndex by indexInc

Parameters
indexIncThe amount to increment the delay buffer index

◆ incDelayBuffWriteIndex()

void incDelayBuffWriteIndex ( )
inlineprotectedinherited

Increments the currentDelayWriteBufferIndex by 1

◆ process()

effect_t process ( effect_t  inputSample)
inlineoverridevirtual

Main process block for applying audio effect

Parameters
inputSampleThe int16_t input audio sample for the effect to be applied to
Returns
an audio sample as a int16_t with effect applied

Reimplemented from EffectSuiteBase.

◆ processDouble()

effectsuite_t processDouble ( effectsuite_t  inputSample)
inlineoverridevirtual

Apply delay and return input sample along with delay buffer signal

Parameters
inputSample<#inputSample description#>
Returns
<#return value description#>

Implements EffectSuiteBase.

◆ setDelayBuffer()

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()

void setDelayBuffReadIndex ( effectsuite_t  index)
inlineprotectedinherited

sets the currentDelayBufferReadIndex by indexInc (Currently no wrapping)

Parameters
indexthe read index index required

◆ setDelayGain()

void setDelayGain ( effectsuite_t  gain)
inline

setDelayGain: sets the delay 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
setFeedbackGain

◆ setDelayTime()

void setDelayTime ( effectsuite_t  delayInSamples)
inline

<#Description#>

Parameters
delayInSample<#delayInSample description#>

◆ setDelayTransitionTime()

void setDelayTransitionTime ( effectsuite_t  seconds)
inline

<#Description#>

Parameters
seconds<#seconds description#>

◆ setFeedbackGain()

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

◆ setInterpolationTable()

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

◆ setupDelayEffectBase()

void setupDelayEffectBase ( const int  bufferSizeSamples)
inlineinherited

<#Description#>

Parameters
bufferSizeSamples<#bufferSizeSamples description#>

◆ setupSimpleDelay()

void setupSimpleDelay ( int  delayInSamples)
inline

<#Description#>

Parameters
delayInSamples<#delayInSamples description#>

◆ storeSample()

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

◆ delayBuffer

effectsuite_t* delayBuffer = 0
protectedinherited

buffer to stored audio buffer for delay effects

◆ delayIncrement

effectsuite_t delayIncrement
protected

increment when transition from current to target delay per sample set by delayTransitionTime

◆ delayTimeSamples

int delayTimeSamples = 44100
protectedinherited

the delay time of signal in samples

◆ delayTransitionTime

effectsuite_t delayTransitionTime
protected

time in seconds to transition from one delay to another

◆ error

bool error
protectedinherited

internal class error boolean

◆ invDelayIncrement

effectsuite_t invDelayIncrement
protected

inverse of delay increment: for working out whole number cyles to reach target delay

◆ maxDelayBufferSize

int maxDelayBufferSize = 441000
protectedinherited

Maximum number of samples that can be stored in delayBuffer


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