Simple Chorus effect with a single delay voice and mono output Chorus is effective between 15 and 20 miliseconds delay of original audio. Requires the sample rate when initialising.
More...
#include <AudioEffectsSuite.h>
|
static const int | interpOrder = 4 |
|
static const int | interpResolution = 1000 |
|
static const int | order = 4 |
|
static const int | res = 100 |
|
Simple Chorus effect with a single delay voice and mono output Chorus is effective between 15 and 20 miliseconds delay of original audio. Requires the sample rate when initialising.
- Author
- Matthew Hamilton
- Copyright
- MIT License
◆ SimpleChorus()
Constructor: initialises the effect parameters Since the class inherits DelayEffectBase it must set a delay buffer size when initialisi.
◆ allocateBufferMemory()
void allocateBufferMemory |
( |
| ) |
|
|
inlineprotectedinherited |
will allocate memory to a buffer given the current filter order and set all values == 0.00
◆ allocateMemory()
allocate memory to internal wave table based on sample rate
- Returns
- returns true on success or false on failure
◆ applyFilter()
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
-
sampVal | is the sample to be processed |
- Returns
- filtered audio sample
◆ changeChebyICoefficients()
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()
checks internal memory storage of filter coeffcients and deletes if required
◆ clipWave()
void clipWave |
( |
effectsuite_t |
amp | ) |
|
|
inlineinherited |
clip wave table values with a tanh function. Effect change with a variable amp to control intensity.
- Parameters
-
amp | amount to multiply signal before being fed through a tanh function |
◆ 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
-
inputSample | sample to be stored for delay (effectsuite_t) |
◆ envelope()
effectsuite_t envelope |
( |
effectsuite_t |
sample | ) |
|
|
inlineinherited |
detect the envelop of an incoming signal
- Parameters
-
sample | the incoming signal sample value |
- Returns
- returns envelope dection signal sample value
◆ getInterpolatedOut()
effectsuite_t getInterpolatedOut |
( |
effectsuite_t |
bufferIndex | ) |
|
|
inlineprotectedinherited |
get the value of the requested buffer index by interpolating other points
- Parameters
-
bufferIndex | The required buffer index |
- Returns
- interpolated output
◆ getInterpOut()
effectsuite_t getInterpOut |
( |
effectsuite_t |
bufferIndex | ) |
|
|
inlineprotectedinherited |
get the interpolated output of the waveTable from the given buffer index
- Parameters
-
bufferIndex | buffer index as effectsuite_t |
- Returns
- returns interpolated value from surrounding wavtable indices
◆ getModSignal()
effectsuite_t getModSignal |
( |
| ) |
|
|
inlineprotected |
modulation signal scaling equation: ((n - modMin)*modNorm*swing) + base modulates a random white noise signal by lowpass filtering then scaling to a range between 15 to 25 miliseconds of delay.
◆ getSplineOut()
effectsuite_t getSplineOut |
( |
effectsuite_t |
bufferIndex, |
|
|
int |
freq |
|
) |
| |
|
inlineprotectedinherited |
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
-
bufferIndex | the required buffer index |
freq | (speed) that the table is being read through |
- Returns
- returns interpolated value as effectsuite_t
◆ incBufferIndex()
increment the buffer index and wrap it to the filter order
◆ incDelayBuffReadIndex()
void incDelayBuffReadIndex |
( |
effectsuite_t |
indexInc | ) |
|
|
inlineprotectedinherited |
Increments the currentDelayBufferReadIndex by indexInc
- Parameters
-
indexInc | The amount to increment the delay buffer index |
◆ incDelayBuffWriteIndex()
void incDelayBuffWriteIndex |
( |
| ) |
|
|
inlineprotectedinherited |
Increments the currentDelayWriteBufferIndex by 1
◆ processDouble()
virtual effectsuite_t processDouble |
( |
effectsuite_t |
inputSample | ) |
|
|
inlineoverridevirtual |
apply chorus effect to audio sample
- Parameters
-
inputSample | input audio sample |
- Returns
- processed audio sample
Reimplemented from FilterEffectBase.
◆ readNoise()
effectsuite_t readNoise |
( |
| ) |
|
|
inlineinherited |
reads out white noise
- Returns
- random number between -1 and 1
◆ readTable()
effectsuite_t readTable |
( |
effectsuite_t |
freq | ) |
|
|
inlineinherited |
Read through values in waveTable as a given frequency
- Parameters
-
freq | read speed in Hz: essentially the number of samples jumped between reads |
- Returns
- value from table as effectsuite_t
◆ rms()
effectsuite_t rms |
( |
effectsuite_t |
sample | ) |
|
|
inlineprotectedinherited |
root mean square of signal over a specific sample window
◆ setBase()
void setBase |
( |
effectsuite_t |
baseAmount | ) |
|
|
inline |
sets the 'base' of the chorus: the minimum delay in the signal.
- Parameters
-
baseAmount | <#baseAmount description#> |
◆ setChebyICoefficients()
bool setChebyICoefficients |
( |
effectsuite_t |
cutFreq, |
|
|
bool |
shelfType, |
|
|
effectsuite_t |
ripple |
|
) |
| |
|
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
◆ setDC()
◆ setDelayBuffer()
bool setDelayBuffer |
( |
int |
bufferSizeSamples | ) |
|
|
inlineprotectedinherited |
Allocates memory for delay buffer and initialises all elements to 0
- Parameters
-
bufferSizeSamples | the 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
-
index | the read index index required |
◆ 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
◆ setInterpTable()
populates the internal interpolation table
- Returns
- return tru on success, else false
◆ setOffSine()
sets wavetable to one period of a sine wave oscillating between 0 and 1
◆ setRamp()
set wave table to be a ramp from 0 to 1
◆ setSawtooth()
sets wavetable to one period of a sawtooth wave
◆ setSimpleLpf()
bool setSimpleLpf |
( |
int |
order | ) |
|
|
inlineprotectedinherited |
a simple normalised fir low pass filter @params order number of delay coefficients
◆ setSine()
sets wavetable to one period of a sine wave oscillating between -1 and 1
◆ setSquare()
sets wavetable to one period of a square wave
◆ setSwing()
void setSwing |
( |
effectsuite_t |
swingAmount | ) |
|
|
inline |
set the 'swing' of the chorus: The amount intensity of vibrato in the delay signal
- Parameters
-
swingAmount | <#swingAmount description#> |
◆ setTriangle()
sets wavetable to one period of a triangle wave
◆ setupChorus()
void setupChorus |
( |
effectsuite_t |
extSampleRate | ) |
|
|
inline |
set parameters and internal sample rate
- Parameters
-
extSampleRate | external sample rate |
◆ setupDelayEffectBase()
void setupDelayEffectBase |
( |
const int |
bufferSizeSamples | ) |
|
|
inlineinherited |
<#Description#>
- Parameters
-
bufferSizeSamples | <#bufferSizeSamples description#> |
◆ setupModulationBaseClass()
void setupModulationBaseClass |
( |
effectsuite_t |
extSampRate | ) |
|
|
inlineinherited |
setup the class with a given sample rate. Basically reperforming the constructor
- Parameters
-
extSampRate | External sample rate |
◆ storeSample()
void storeSample |
( |
effectsuite_t |
inputSample | ) |
|
|
inlineprotectedinherited |
store input sample into the delay buffer
- Parameters
-
inputSample | sample to be stored for delay (effectsuite_t) |
◆ base
minimum delay in samples. Typically 10 milliseconds
◆ bufferIndex
◆ delayBuffer
effectsuite_t* delayBuffer = 0 |
|
protectedinherited |
buffer to stored audio buffer for delay effects
◆ delayTimeSamples
int delayTimeSamples = 44100 |
|
protectedinherited |
the delay time of signal in samples
◆ error
internal class error boolean
◆ filterOrder
order of delay filter including the zero delay coefficients
◆ firBuffer
effectsuite_t* firBuffer = 0 |
|
protectedinherited |
buffer to hold forward delay sample data
◆ firCoefficients
effectsuite_t* firCoefficients = 0 |
|
protectedinherited |
Numerator coefficients in delay filter firCoefficients[0] z^0 coeffcieint firCoefficients[1] z^-1 coefficient
◆ firTemp
effectsuite_t* firTemp = 0 |
|
protectedinherited |
hold temporary values for fir coeffcient buffer
◆ iirBuffer
effectsuite_t* iirBuffer = 0 |
|
protectedinherited |
buffer to hold backward delay sample data
◆ iirCoefficients
effectsuite_t* iirCoefficients = 0 |
|
protectedinherited |
◆ iirTemp
effectsuite_t* iirTemp = 0 |
|
protectedinherited |
hold temporary values for iir coeffcient buffer
◆ maxDelayBufferSize
int maxDelayBufferSize = 441000 |
|
protectedinherited |
Maximum number of samples that can be stored in delayBuffer
◆ modMax
effectsuite_t modMax = .5 |
|
protected |
the maximum value of the lowpassed random modulation signal
◆ modMin
effectsuite_t modMin = .5 |
|
protected |
the minimum value of the lowpassed random modulation signal
◆ modNorm
the normalising factor of the random delay signal
◆ rmsBuffer
◆ rmsBufferIndex
current write index of rmsBuffer
◆ rmsWindowSize
const int rmsWindowSize = 128 |
|
protectedinherited |
window size in samples of rms window
◆ sampleRate
◆ swing
swing range of delayed audio index in samples typical maximum swing would be 15 milliseconds (i.e. 0.015*sampleRate)
◆ tableIndex
effectsuite_t tableIndex = 0 |
|
inherited |
◆ timeStep
time between samples: 1/sampRate
◆ waveTable
store modulation signal as
The documentation for this class was generated from the following file: