@ -26,6 +26,7 @@
# include "limits.h"
# include "effect_modulated_delay.h"
# include "spline.h"
# include "config.h"
/******************************************************************/
@ -99,7 +100,56 @@ void AudioEffectModulatedDelay::update(void)
// Calculate modulation index as a float, for interpolation later.
// The index is located around the half of the delay length multiplied by the current amount of the modulator
mod_idx = float ( * mp ) / SHRT_MAX * float ( _delay_length > > 1 ) ;
/**************************************************************************************************************
Use an IIR filter on the modulation for avoiding aliasing ( http : //www-users.cs.york.ac.uk/~fisher/mkfilter/) */
# if defined(FILTER_IIR_ORDER_1)
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line : / www / usr / fisher / helpers / mkfilter - Bu - Lp - o 1 - a 1.1333499558e-01 0.0000000000e+00 - l
Parameters : filtertype = Butterworth
passtype = Lowpass
ripple =
order = 1
samplerate = 44117.64706
corner1 = 5000
corner2 =
adzero =
logmin =
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define NZEROS 1
# define NPOLES 1
# define GAIN 3.688918967e+00
static float xv [ NZEROS + 1 ] , yv [ NPOLES + 1 ] ;
xv [ 0 ] = xv [ 1 ] ;
xv [ 1 ] = ( float ( * mp ) / SHRT_MAX ) / GAIN ;
yv [ 0 ] = yv [ 1 ] ;
yv [ 1 ] = ( xv [ 0 ] + xv [ 1 ] ) + ( 0.4578357460 * yv [ 0 ] ) ;
//new_value = yv[1];
mod_idx = yv [ 1 ] * float ( _delay_length > > 1 ) ;
# elif defined(FILTER_IIR_ORDER_3)
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line : / www / usr / fisher / helpers / mkfilter - Bu - Lp - o 3 - a 1.1333333333e-01 0.0000000000e+00 - l
raw alpha1 = 0.1133333333
raw alpha2 = 0.1133333333
warped alpha1 = 0.1183783855
warped alpha2 = 0.1183783855
gain at dc : mag = 4.028005941e+01 phase = 0.0000000000 pi
gain at centre : mag = 2.848230315e+01 phase = - 0.7500000000 pi
gain at hf : mag = 0.000000000e+00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define NZEROS 3
# define NPOLES 3
# define GAIN 4.028005941e+01
static float xv [ NZEROS + 1 ] , yv [ NPOLES + 1 ] ;
xv [ 0 ] = xv [ 1 ] ; xv [ 1 ] = xv [ 2 ] ; xv [ 2 ] = xv [ 3 ] ;
xv [ 3 ] = ( float ( * mp ) / SHRT_MAX ) / GAIN ;
yv [ 0 ] = yv [ 1 ] ; yv [ 1 ] = yv [ 2 ] ; yv [ 2 ] = yv [ 3 ] ;
yv [ 3 ] = ( xv [ 0 ] + xv [ 3 ] ) + 3 * ( xv [ 1 ] + xv [ 2 ] )
+ ( 0.2323461955 * yv [ 0 ] ) + ( - 1.0299524229 * yv [ 1 ] )
+ ( 1.5989967885 * yv [ 2 ] ) ;
//new_value = yv[3];
mod_idx = yv [ 3 ] * float ( _delay_length > > 1 ) ;
/************************************************************************/
# endif
mod_fraction = modff ( mod_idx , & mod_number ) ;
# ifdef INTERPOLATE_MODE