@ -40,23 +40,18 @@
AudioPlayQueue dexed1 ;
AudioAnalyzePeak peak1 ;
AudioEffectDelay delay_r ;
AudioEffectDelay delay_l ;
AudioEffectDelay delay1 ;
# ifdef USE_REVERB
AudioEffectFreeverbStereo freeverbs1 ;
AudioEffectModulatedDelay modchorus_r ;
AudioEffectModulatedDelay modchorus_l ;
# endif
AudioEffectModulatedDelay modchorus ;
# if MOD_FILTER_OUTPUT != MOD_NO_FILTER_OUTPUT
AudioFilterBiquad modchorus_filter_r ;
AudioFilterBiquad modchorus_filter_l ;
AudioFilterBiquad modchorus_filter ;
# endif
AudioSynthWaveform modulator ;
AudioAmplifier inverter ;
AudioMixer4 chorus_mixer_r ;
AudioMixer4 chorus_mixer_l ;
AudioMixer4 delay_mixer_r ;
AudioMixer4 delay_mixer_l ;
AudioMixer4 delay_fb_mixer_r ;
AudioMixer4 delay_fb_mixer_l ;
AudioMixer4 chorus_mixer ;
AudioMixer4 delay_mixer ;
AudioMixer4 delay_fb_mixer ;
AudioMixer4 reverb_mixer_r ;
AudioMixer4 reverb_mixer_l ;
AudioAmplifier volume_r ;
@ -65,62 +60,56 @@ AudioAmplifier volume_l;
AudioOutputUSB usb1 ;
# endif
AudioConnection patchCord0 ( dexed1 , peak1 ) ;
AudioConnection patchCord1 ( dexed1 , 0 , chorus_mixer_r , 0 ) ;
AudioConnection patchCord2 ( dexed1 , 0 , chorus_mixer_l , 0 ) ;
AudioConnection patchCord3 ( dexed1 , 0 , delay_mixer_r , 0 ) ;
AudioConnection patchCord4 ( dexed1 , 0 , delay_mixer_l , 0 ) ;
AudioConnection patchCord5 ( dexed1 , 0 , delay_fb_mixer_r , 0 ) ;
AudioConnection patchCord6 ( dexed1 , 0 , delay_fb_mixer_l , 0 ) ;
AudioConnection patchCord7 ( dexed1 , 0 , reverb_mixer_r , 0 ) ;
AudioConnection patchCord8 ( dexed1 , 0 , reverb_mixer_l , 0 ) ;
AudioConnection patchCord9 ( dexed1 , 0 , modchorus_r , 0 ) ;
AudioConnection patchCord10 ( dexed1 , 0 , modchorus_l , 0 ) ;
AudioConnection patchCord11 ( modulator , 0 , modchorus_r , 1 ) ;
AudioConnection patchCord12 ( modulator , inverter ) ;
AudioConnection patchCord13 ( inverter , 0 , modchorus_l , 1 ) ;
AudioConnection patchCord1 ( dexed1 , 0 , chorus_mixer , 0 ) ;
AudioConnection patchCord3 ( dexed1 , 0 , delay_mixer , 0 ) ;
AudioConnection patchCord4 ( dexed1 , 0 , delay_fb_mixer , 0 ) ;
# ifdef USE_REVERB
AudioConnection patchCord5 ( dexed1 , 0 , reverb_mixer_r , 0 ) ;
AudioConnection patchCord6 ( dexed1 , 0 , reverb_mixer_l , 0 ) ;
# endif
AudioConnection patchCord7 ( dexed1 , 0 , modchorus , 0 ) ;
AudioConnection patchCord8 ( modulator , 0 , modchorus , 1 ) ;
# if MOD_FILTER_OUTPUT != MOD_NO_FILTER_OUTPUT
AudioConnection patchCord14 ( modchorus_r , modchorus_filter_r ) ;
AudioConnection patchCord15 ( modchorus_l , modchorus_filter_l ) ;
AudioConnection patchCord16 ( modchorus_filter_r , 0 , chorus_mixer_r , 1 ) ;
AudioConnection patchCord17 ( modchorus_filter_l , 0 , chorus_mixer_l , 1 ) ;
AudioConnection patchCord9 ( modchorus , modchorus_filter ) ;
AudioConnection patchCord10 ( modchorus_filter , 0 , chorus_mixer , 1 ) ;
# else
AudioConnection patchCord9 ( modchorus , 0 , chorus_mixer , 1 ) ;
# endif
AudioConnection patchCord11 ( chorus_mixer , 0 , delay_mixer , 1 ) ;
AudioConnection patchCord12 ( delay_fb_mixer , 0 , delay_mixer , 1 ) ;
AudioConnection patchCord13 ( delay_mixer , 0 , reverb_mixer_r , 0 ) ;
AudioConnection patchCord14 ( delay_mixer , 0 , reverb_mixer_l , 0 ) ;
AudioConnection patchCord15 ( delay1 , 0 , delay_mixer , 2 ) ;
AudioConnection patchCord16 ( delay_fb_mixer , delay1 ) ;
# ifdef USE_REVERB
AudioConnection patchCord17 ( delay_mixer , 0 , freeverbs1 , 0 ) ;
AudioConnection patchCord18 ( delay_mixer , 0 , freeverbs1 , 1 ) ;
AudioConnection patchCord19 ( freeverbs1 , 0 , reverb_mixer_r , 1 ) ;
AudioConnection patchCord20 ( freeverbs1 , 1 , reverb_mixer_l , 1 ) ;
AudioConnection patchCord21 ( reverb_mixer_r , volume_r ) ;
AudioConnection patchCord22 ( reverb_mixer_l , volume_l ) ;
# else
AudioConnection patchCord14 ( modchorus_r , 0 , chorus_mixer_r , 1 ) ;
AudioConnection patchCord15 ( modchorus_l , 0 , chorus_mixer_l , 1 ) ;
AudioConnection patchCord17 ( delay_mixer , volume_r ) ;
AudioConnection patchCord18 ( delay_mixer , volume_l ) ;
# endif
AudioConnection patchCord18 ( chorus_mixer_r , 0 , delay_mixer_r , 1 ) ;
AudioConnection patchCord19 ( chorus_mixer_l , 0 , delay_mixer_l , 1 ) ;
AudioConnection patchCord20 ( delay_fb_mixer_r , 0 , delay_mixer_r , 1 ) ;
AudioConnection patchCord21 ( delay_fb_mixer_l , 0 , delay_mixer_l , 1 ) ;
AudioConnection patchCord22 ( delay_mixer_r , 0 , reverb_mixer_r , 1 ) ;
AudioConnection patchCord23 ( delay_mixer_l , 0 , reverb_mixer_l , 1 ) ;
AudioConnection patchCord24 ( delay_r , 0 , delay_mixer_r , 2 ) ;
AudioConnection patchCord25 ( delay_l , 0 , delay_mixer_l , 2 ) ;
AudioConnection patchCord26 ( delay_fb_mixer_r , delay_r ) ;
AudioConnection patchCord27 ( delay_fb_mixer_l , delay_l ) ;
AudioConnection patchCord28 ( delay_mixer_r , 0 , freeverbs1 , 1 ) ;
AudioConnection patchCord29 ( delay_mixer_l , 0 , freeverbs1 , 1 ) ;
AudioConnection patchCord30 ( freeverbs1 , 0 , reverb_mixer_r , 1 ) ;
AudioConnection patchCord31 ( freeverbs1 , 1 , reverb_mixer_l , 1 ) ;
AudioConnection patchCord32 ( reverb_mixer_r , volume_r ) ;
AudioConnection patchCord33 ( reverb_mixer_l , volume_l ) ;
# ifdef MIDI_DEVICE_USB
AudioConnection patchCord34 ( volume_r , 0 , usb1 , 0 ) ;
AudioConnection patchCord35 ( volume_l , 0 , usb1 , 1 ) ;
AudioConnection patchCord23 ( volume_r , 0 , usb1 , 0 ) ;
AudioConnection patchCord24 ( volume_l , 0 , usb1 , 1 ) ;
# endif
# if defined(TEENSY_AUDIO_BOARD)
AudioOutputI2S i2s1 ;
AudioConnection patchCord36 ( volume_r , 0 , i2s1 , 0 ) ;
AudioConnection patchCord37 ( volume_l , 0 , i2s1 , 1 ) ;
AudioConnection patchCord25 ( volume_r , 0 , i2s1 , 0 ) ;
AudioConnection patchCord26 ( volume_l , 0 , i2s1 , 1 ) ;
AudioControlSGTL5000 sgtl5000_1 ;
# elif defined(TGA_AUDIO_BOARD)
AudioOutputI2S i2s1 ;
AudioConnection patchCord36 ( volume_r , 0 , i2s1 , 0 ) ;
AudioConnection patchCord37 ( volume_l , 0 , i2s1 , 1 ) ;
AudioConnection patchCord27 ( volume_r , 0 , i2s1 , 0 ) ;
AudioConnection patchCord28 ( volume_l , 0 , i2s1 , 1 ) ;
AudioControlWM8731master wm8731_1 ;
# else
AudioOutputPT8211 pt8211_1 ;
AudioConnection patchCord36 ( volume_r , 0 , pt8211_1 , 0 ) ;
AudioConnection patchCord37 ( volume_l , 0 , pt8211_1 , 1 ) ;
AudioConnection patchCord29 ( volume_r , 0 , pt8211_1 , 0 ) ;
AudioConnection patchCord30 ( volume_l , 0 , pt8211_1 , 1 ) ;
# endif
Dexed * dexed = new Dexed ( SAMPLE_RATE ) ;
@ -158,8 +147,7 @@ value_change_t soften_filter_res = {0.0, 0};
value_change_t soften_filter_cut = { 0.0 , 0 } ;
// Allocate the delay lines for left and right channels
short l_delayline [ MOD_DELAY_SAMPLE_BUFFER ] ;
short r_delayline [ MOD_DELAY_SAMPLE_BUFFER ] ;
short delayline [ MOD_DELAY_SAMPLE_BUFFER ] ;
# ifdef ENABLE_LCD_UI
/***********************************************************************
@ -302,14 +290,10 @@ void setup()
}
// Init effects
if ( ! modchorus_r . begin ( r_ delayline, MOD_DELAY_SAMPLE_BUFFER ) ) {
if ( ! modchorus . begin ( delayline , MOD_DELAY_SAMPLE_BUFFER ) ) {
Serial . println ( F ( " AudioEffectModulatedDelay - right channel begin failed " ) ) ;
while ( 1 ) ;
}
if ( ! modchorus_l . begin ( l_delayline , MOD_DELAY_SAMPLE_BUFFER ) ) {
Serial . println ( F ( " AudioEffectModulatedDelay - left channel begin failed " ) ) ;
while ( 1 ) ;
}
# ifdef DEBUG
Serial . print ( F ( " MOD_DELAY_SAMPLE_BUFFER= " ) ) ;
Serial . print ( MOD_DELAY_SAMPLE_BUFFER , DEC ) ;
@ -321,38 +305,29 @@ void setup()
modulator . offset ( 0.0 ) ;
# if MOD_FILTER_OUTPUT == MOD_BUTTERWORTH_FILTER_OUTPUT
// Butterworth filter, 12 db/octave
modchorus_filter_r . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.707 ) ;
modchorus_filter_l . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.707 ) ;
modchorus_filter . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.707 ) ;
# elif MOD_FILTER_OUTPUT == MOD_LINKWITZ_RILEY_FILTER_OUTPUT
// Linkwitz-Riley filter, 48 dB/octave
modchorus_filter_r . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter_r . setLowpass ( 1 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter_r . setLowpass ( 2 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter_r . setLowpass ( 3 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter_l . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter_l . setLowpass ( 1 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter_l . setLowpass ( 2 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter_l . setLowpass ( 3 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter . setLowpass ( 1 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter . setLowpass ( 2 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter . setLowpass ( 3 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter . setLowpass ( 0 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter . setLowpass ( 1 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
modchorus_filter . setLowpass ( 2 , MOD_FILTER_CUTOFF_HZ , 0.54 ) ;
modchorus_filter . setLowpass ( 3 , MOD_FILTER_CUTOFF_HZ , 1.3 ) ;
# endif
chorus_mixer_r . gain ( 0 , 1.0 ) ;
chorus_mixer_l . gain ( 0 , 1.0 ) ;
chorus_mixer_r . gain ( 1 , 0.0 ) ;
chorus_mixer_l . gain ( 1 , 0.0 ) ;
delay_r . delay ( 0 , mapfloat ( effect_delay_feedback , 0 , ENC_DELAY_TIME_STEPS , 0.0 , DELAY_MAX_TIME ) ) ;
delay_l . delay ( 0 , mapfloat ( effect_delay_feedback , 0 , ENC_DELAY_TIME_STEPS , 0.0 , DELAY_MAX_TIME ) ) ;
// delay_fb_mixer_r is the feedback-adding mixer, delay_mixer_r the whole delay (with/without feedback) mixer
delay_fb_mixer_r . gain ( 0 , 1.0 ) ; // original signal
delay_fb_mixer_l . gain ( 0 , 1.0 ) ; // original signal
delay_fb_mixer_r . gain ( 1 , mapfloat ( effect_delay_feedback , 0 , ENC_DELAY_FB_STEPS , 0.0 , 1.0 ) ) ; // amount of feedback
delay_fb_mixer_l . gain ( 1 , mapfloat ( effect_delay_feedback , 0 , ENC_DELAY_FB_STEPS , 0.0 , 1.0 ) ) ; // amount of feedback
delay_mixer_r . gain ( 0 , 1.0 - mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // original signal
delay_mixer_l . gain ( 0 , 1.0 - mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // original signal
delay_mixer_r . gain ( 1 , mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // delayed signal (including feedback)
delay_mixer_l . gain ( 1 , mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // delayed signal (including feedback)
delay_mixer_r . gain ( 2 , mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // only delayed signal (without feedback)
delay_mixer_l . gain ( 2 , mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // only delayed signal (without feedback)
chorus_mixer . gain ( 0 , 1.0 ) ;
chorus_mixer . gain ( 1 , 0.0 ) ;
delay1 . delay ( 0 , mapfloat ( effect_delay_feedback , 0 , ENC_DELAY_TIME_STEPS , 0.0 , DELAY_MAX_TIME ) ) ;
// delay_fb_mixer is the feedback-adding mixer, delay_mixer_r the whole delay (with/without feedback) mixer
delay_fb_mixer . gain ( 0 , 1.0 ) ; // original signal
delay_fb_mixer . gain ( 1 , mapfloat ( effect_delay_feedback , 0 , ENC_DELAY_FB_STEPS , 0.0 , 1.0 ) ) ; // amount of feedback
delay_mixer . gain ( 0 , 1.0 - mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // original signal
delay_mixer . gain ( 1 , mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // delayed signal (including feedback)
delay_mixer . gain ( 2 , mapfloat ( effect_delay_volume , 0 , ENC_DELAY_VOLUME_STEPS , 0.0 , 1.0 ) ) ; // only delayed signal (without feedback)
reverb_mixer_r . gain ( 0 , 1.0 ) ;
reverb_mixer_l . gain ( 0 , 1.0 ) ;
@ -593,7 +568,7 @@ void handleControlChange(byte inChannel, byte inCtrl, byte inValue)
break ;
case 105 : // CC 105: delay time
effect_delay_time = map ( inValue , 0 , 127 , 0 , ENC_DELAY_TIME_STEPS ) ;
////delay_r .delay(0, mapfloat(effect_delay_time, 0, ENC_DELAY_TIME_STEPS, 0.0, DELAY_MAX_TIME));
////delay.delay(0, mapfloat(effect_delay_time, 0, ENC_DELAY_TIME_STEPS, 0.0, DELAY_MAX_TIME));
break ;
case 106 : // CC 106: delay feedback
effect_delay_feedback = map ( inValue , 0 , 127 , 0 , ENC_DELAY_FB_STEPS ) ;