Removed master gain. Using gain from Dexed as master gain.

Using "global" pan for all audio cards.
Small fixes.
pull/4/head
Holger Wirtz 5 years ago
parent 6d9847e714
commit 7b0a83cef8
  1. 64
      MicroDexed.ino

@ -61,30 +61,24 @@ AudioConnection patchCord3(delay1, 0, mixer1, 1);
AudioConnection patchCord4(delay1, 0, mixer2, 2);
AudioConnection patchCord5(mixer1, delay1);
AudioConnection patchCord6(mixer1, 0, mixer2, 1);
AudioAmplifier volume_r;
AudioAmplifier volume_l;
AudioConnection patchCord7(mixer2, volume_r);
AudioConnection patchCord8(mixer2, volume_l);
#if defined(TEENSY_AUDIO_BOARD)
AudioOutputI2S i2s1;
AudioConnection patchCord7(mixer2, 0, i2s1, 0);
AudioConnection patchCord8(mixer2, 0, i2s1, 1);
AudioConnection patchCord9(volume_r, 0, i2s1, 0);
AudioConnection patchCord10(volume_l, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1;
#elif defined(TGA_AUDIO_BOARD)
AudioOutputI2S i2s1;
AudioAmplifier volume_r;
AudioAmplifier volume_l;
AudioConnection patchCord7(mixer2, volume_r);
AudioConnection patchCord8(mixer2, volume_l);
AudioConnection patchCord9(volume_r, 0, i2s1, 1);
AudioConnection patchCord10(volume_l, 0, i2s1, 0);
AudioControlWM8731master wm8731_1;
#else
AudioOutputPT8211 pt8211_1;
AudioAmplifier volume_master;
AudioAmplifier volume_r;
AudioAmplifier volume_l;
AudioConnection patchCord7(mixer2, 0, volume_master, 0);
AudioConnection patchCord8(volume_master, volume_r);
AudioConnection patchCord9(volume_master, volume_l);
AudioConnection patchCord10(volume_r, 0, pt8211_1, 0);
AudioConnection patchCord11(volume_l, 0, pt8211_1, 1);
AudioConnection patchCord9(volume_r, 0, pt8211_1, 0);
AudioConnection patchCord10(volume_l, 0, pt8211_1, 1);
#endif
Dexed* dexed = new Dexed(SAMPLE_RATE);
@ -157,13 +151,13 @@ void setup()
#ifdef TEENSY_AUDIO_BOARD
sgtl5000_1.enable();
//sgtl5000_1.dacVolumeRamp();
sgtl5000_1.dacVolumeRampLinear();
sgtl5000_1.dacVolumeRamp();
//sgtl5000_1.dacVolumeRampLinear();
//sgtl5000_1.dacVolumeRampDisable();
sgtl5000_1.unmuteHeadphone();
sgtl5000_1.unmuteLineout();
sgtl5000_1.autoVolumeDisable(); // turn off AGC
sgtl5000_1.volume(0.5,0.5); // Headphone volume
sgtl5000_1.volume(0.5, 0.5); // Headphone volume
sgtl5000_1.lineOutLevel(SGTL5000_LINEOUT_LEVEL);
sgtl5000_1.audioPostProcessorEnable();
sgtl5000_1.autoVolumeControl(1, 1, 1, 0.9, 0.01, 0.05);
@ -182,8 +176,6 @@ void setup()
Serial.println(F("PT8211 enabled."));
#endif
set_volume(configuration.vol, configuration.pan);
// start SD card
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
@ -222,22 +214,25 @@ void setup()
}
#endif
// Init effects
delay1.delay(0, mapfloat(effect_delay_feedback, 0, ENC_DELAY_TIME_STEPS, 0.0, DELAY_MAX_TIME));
// mixer1 is the feedback-adding mixer, mixer2 the whole delay (with/without feedback) mixer
mixer1.gain(0, 1.0); // original signal
mixer1.gain(1, mapfloat(effect_delay_feedback, 0, ENC_DELAY_FB_STEPS, 0.0, 1.0)); // amount of feedback
mixer2.gain(0, 1.0 - mapfloat(effect_delay_volume, 0, ENC_DELAY_VOLUME_STEPS, 0.0, 1.0)); // original signal
mixer2.gain(1, mapfloat(effect_delay_volume, 0, ENC_DELAY_VOLUME_STEPS, 0.0, 1.0)); // delayed signal (including feedback)
mixer2.gain(2, mapfloat(effect_delay_volume, 0, ENC_DELAY_VOLUME_STEPS, 0.0, 1.0)); // only delayed signal (without feedback)
dexed->fx.Gain = 1.0;
dexed->fx.Reso = 1.0 - float(effect_filter_resonance) / ENC_FILTER_RES_STEPS;
dexed->fx.Cutoff = 1.0 - float(effect_filter_cutoff) / ENC_FILTER_CUT_STEPS;
// load default SYSEX data
load_sysex(configuration.bank, configuration.voice);
}
// Init effects
delay1.delay(0, mapfloat(effect_delay_feedback, 0, ENC_DELAY_TIME_STEPS, 0.0, DELAY_MAX_TIME));
// mixer1 is the feedback-adding mixer, mixer2 the whole delay (with/without feedback) mixer
mixer1.gain(0, 1.0); // original signal
mixer1.gain(1, mapfloat(effect_delay_feedback, 0, ENC_DELAY_FB_STEPS, 0.0, 1.0)); // amount of feedback
mixer2.gain(0, 1.0 - mapfloat(effect_delay_volume, 0, ENC_DELAY_VOLUME_STEPS, 0.0, 1.0)); // original signal
mixer2.gain(1, mapfloat(effect_delay_volume, 0, ENC_DELAY_VOLUME_STEPS, 0.0, 1.0)); // delayed signal (including feedback)
mixer2.gain(2, mapfloat(effect_delay_volume, 0, ENC_DELAY_VOLUME_STEPS, 0.0, 1.0)); // only delayed signal (without feedback)
dexed->fx.Gain = 1.0;
dexed->fx.Reso = 1.0 - float(effect_filter_resonance) / ENC_FILTER_RES_STEPS;
dexed->fx.Cutoff = 1.0 - float(effect_filter_cutoff) / ENC_FILTER_CUT_STEPS;
// set initial volume and pan (read from EEPROM)
set_volume(configuration.vol, configuration.pan);
#ifdef I2C_DISPLAY
enc[0].write(map(configuration.vol * 100, 0, 100, 0, ENC_VOL_STEPS));
enc_val[0] = enc[0].read();
@ -721,14 +716,11 @@ void set_volume(float v, float p)
Serial.println(pow(configuration.vol * cosf( configuration.pan * PI / 2), VOLUME_CURVE), 3);
#endif
dexed->fx.Gain = v;
// http://files.csound-tutorial.net/floss_manual/Release03/Cs_FM_03_ScrapBook/b-panning-and-spatialization.html
#ifdef TEENSY_AUDIO_BOARD
sgtl5000_1.dacVolume(pow(v * sinf(p * PI / 2), VOLUME_CURVE), pow(v * cosf(p * PI / 2), VOLUME_CURVE));
#else
volume_master.gain(VOLUME_CURVE);
volume_r.gain(sinf(p * PI / 2));
volume_l.gain(cosf(p * PI / 2));
#endif
}
// https://www.dr-lex.be/info-stuff/volumecontrols.html#table1

Loading…
Cancel
Save