Simple and stupid chorus... work, but is not nice.

chorus
Holger Wirtz 6 years ago
parent ca5776aa8b
commit d8b7045057
  1. 104
      MicroMDAEPiano.ino
  2. 16
      UI.cpp
  3. 8
      UI.h
  4. 7
      config.h

@ -44,7 +44,7 @@
#include "Encoder4.h" #include "Encoder4.h"
#include "LiquidCrystalPlus_I2C.h" #include "LiquidCrystalPlus_I2C.h"
#include "UI.h" #include "UI.h"
#include <BALibrary.h> // had rename libraries/BALibrary/src/peripherals/BAPhysicalControls.cpp
//************************************************************************************************* //*************************************************************************************************
//* GLOBAL VARIABLES //* GLOBAL VARIABLES
@ -57,33 +57,44 @@ AudioAnalyzePeak peak_r;
AudioAnalyzePeak peak_l; AudioAnalyzePeak peak_l;
AudioEffectFreeverb freeverb_r; AudioEffectFreeverb freeverb_r;
AudioEffectFreeverb freeverb_l; AudioEffectFreeverb freeverb_l;
AudioMixer4 mixer_r; AudioMixer4 reverb_mixer_r;
AudioMixer4 mixer_l; AudioMixer4 reverb_mixer_l;
AudioEffectDelay delay_r;
AudioEffectDelay delay_l;
AudioMixer4 delay_mixer_r;
AudioMixer4 delay_mixer_l;
AudioConnection patchCord0(queue_r, peak_r); AudioConnection patchCord0(queue_r, peak_r);
AudioConnection patchCord1(queue_l, peak_l); AudioConnection patchCord1(queue_l, peak_l);
AudioConnection patchCord4(queue_r, freeverb_r); AudioConnection patchCord2(queue_r, delay_r);
AudioConnection patchCord5(queue_l, freeverb_l); AudioConnection patchCord3(queue_l, delay_l);
AudioConnection patchCord6(queue_r, 0, mixer_r, 0); AudioConnection patchCord4(queue_r, 0, delay_mixer_r, 0);
AudioConnection patchCord7(queue_l, 0, mixer_l, 0); AudioConnection patchCord5(delay_r, 0, delay_mixer_r, 1);
AudioConnection patchCord8(freeverb_r, 0, mixer_r, 1); AudioConnection patchCord6(queue_l, 0, delay_mixer_l, 0);
AudioConnection patchCord9(freeverb_l, 0, mixer_l, 1); AudioConnection patchCord7(delay_l, 0, delay_mixer_l, 1);
AudioConnection patchCord8(delay_mixer_r, freeverb_r);
AudioConnection patchCord9(delay_mixer_l, freeverb_l);
AudioConnection patchCord10(delay_mixer_r, 0, reverb_mixer_r, 0);
AudioConnection patchCord11(delay_mixer_l, 0, reverb_mixer_l, 0);
AudioConnection patchCord12(freeverb_r, 0, reverb_mixer_r, 1);
AudioConnection patchCord13(freeverb_l, 0, reverb_mixer_l, 1);
#ifdef TEENSY_AUDIO_BOARD #ifdef TEENSY_AUDIO_BOARD
AudioOutputI2S i2s1; AudioOutputI2S i2s1;
AudioConnection patchCord110(mixer_r, 0, i2s1, 0); AudioConnection patchCord14(reverb_mixer_r, 0, i2s1, 0);
AudioConnection patchCord111(mixer_l, 0, i2s1, 1); AudioConnection patchCord15(reverb_mixer_l, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; AudioControlSGTL5000 sgtl5000_1;
#else #else
AudioOutputPT8211 pt8211_1; AudioOutputPT8211 pt8211_1;
AudioAmplifier volume_r; AudioAmplifier volume_r;
AudioAmplifier volume_l; AudioAmplifier volume_l;
AudioConnection patchCord10(mixer_r, volume_r); AudioConnection patchCord14(reverb_mixer_r, volume_r);
AudioConnection patchCord11(mixer_l, volume_l); AudioConnection patchCord15(reverb_mixer_l, volume_l);
AudioConnection patchCord12(volume_r, 0, pt8211_1, 1); AudioConnection patchCord16(volume_r, 0, pt8211_1, 1);
AudioConnection patchCord13(volume_l, 0, pt8211_1, 0); AudioConnection patchCord17(volume_l, 0, pt8211_1, 0);
#endif #endif
// Objects // Objects
mdaEPiano* ep; mdaEPiano* ep;
BALibrary::LowFrequencyOscillatorVector<float> chorus_lfo;
#ifdef MIDI_DEVICE_DIN #ifdef MIDI_DEVICE_DIN
MIDI_CREATE_INSTANCE(HardwareSerial, MIDI_DEVICE_DIN, midi_serial); MIDI_CREATE_INSTANCE(HardwareSerial, MIDI_DEVICE_DIN, midi_serial);
@ -127,25 +138,26 @@ void setup()
Serial.begin(SERIAL_SPEED); Serial.begin(SERIAL_SPEED);
delay(220); delay(220);
// LCD display setup /*
lcd.init(); // LCD display setup
lcd.blink_off(); lcd.init();
lcd.cursor_off(); lcd.blink_off();
lcd.backlight(); lcd.cursor_off();
lcd.noAutoscroll(); lcd.backlight();
lcd.clear(); lcd.noAutoscroll();
lcd.display(); lcd.clear();
lcd.show(0, 0, 20, " MicroMDAEPiano"); lcd.display();
lcd.show(1, 0, 16, "(c)parasiTstudio"); lcd.show(0, 0, 20, " MicroMDAEPiano");
lcd.show(1, 0, 16, "(c)parasiTstudio");
// Encoder setup
enc[0].write(INITIAL_ENC_L_VALUE); // Encoder setup
enc_val[0] = enc[0].read(); enc[0].write(INITIAL_ENC_L_VALUE);
enc[1].write(INITIAL_ENC_R_VALUE); enc_val[0] = enc[0].read();
enc_val[1] = enc[1].read(); enc[1].write(INITIAL_ENC_R_VALUE);
but[0].update(); enc_val[1] = enc[1].read();
but[1].update(); but[0].update();
but[1].update();
*/
// Debug output // Debug output
Serial.println(F("MicroMDAEPiano based on https://sourceforge.net/projects/mda-vst")); Serial.println(F("MicroMDAEPiano based on https://sourceforge.net/projects/mda-vst"));
Serial.println(F("(c)2018 H. Wirtz <wirtz@parasitstudio.de>")); Serial.println(F("(c)2018 H. Wirtz <wirtz@parasitstudio.de>"));
@ -208,6 +220,7 @@ void setup()
Serial.print(1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES)); Serial.print(1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES));
Serial.println(F("ms)")); Serial.println(F("ms)"));
// Epiano
ep->setParameter(DECAY, 0.5); ep->setParameter(DECAY, 0.5);
ep->setParameter(RELEASE, 0.5); ep->setParameter(RELEASE, 0.5);
ep->setParameter(HARDNESS, 0.7); ep->setParameter(HARDNESS, 0.7);
@ -217,14 +230,24 @@ void setup()
ep->setParameter(STEREO, 0.7); ep->setParameter(STEREO, 0.7);
ep->setParameter(OVERDRIVE, 0.3); ep->setParameter(OVERDRIVE, 0.3);
// Reverb
freeverb_r.roomsize(0.2); freeverb_r.roomsize(0.2);
freeverb_l.roomsize(0.2); freeverb_l.roomsize(0.2);
freeverb_r.damping(0.5); freeverb_r.damping(0.5);
freeverb_l.damping(0.5); freeverb_l.damping(0.5);
mixer_r.gain(0, 0.7); reverb_mixer_r.gain(0, 0.7);
mixer_l.gain(0, 0.7); reverb_mixer_l.gain(0, 0.7);
mixer_r.gain(1, 0.3); reverb_mixer_r.gain(1, 0.3);
mixer_l.gain(1, 0.3); reverb_mixer_l.gain(1, 0.3);
// Chorus
delay_mixer_r.gain(0, 1.0 - DELAY_VOLUME);
delay_mixer_r.gain(1, DELAY_VOLUME);
delay_mixer_l.gain(0, 1.0 - DELAY_VOLUME);
delay_mixer_l.gain(1, DELAY_VOLUME);
delay_r.delay(0, DELAY_R_MS);
delay_l.delay(0, DELAY_L_MS);
chorus_lfo.setRateAudio(DELAY_FRQ);
Serial.println(F("<setup end>")); Serial.println(F("<setup end>"));
@ -295,6 +318,11 @@ void loop()
} }
#endif #endif
float c = *chorus_lfo.getNextVector();
delay_r.delay(0, DELAY_R_MS / 2 * c * DELAY_R_INTENSITY + DELAY_R_MS / 2);
delay_l.delay(0, DELAY_L_MS / 2 * c * DELAY_R_INTENSITY + DELAY_L_MS / 2);
queue_r.playBuffer(); queue_r.playBuffer();
queue_l.playBuffer(); queue_l.playBuffer();
} }

@ -26,8 +26,16 @@
UI::UI() UI::UI()
{ {
LiquidCrystalPlus_I2C lcd(LCD_I2C_ADDRESS, LCD_CHARS, LCD_LINES); lcd=new LiquidCrystalPlus_I2C(LCD_I2C_ADDRESS, LCD_CHARS, LCD_LINES);
enc[] = {Encoder4(ENC_L_PIN_A, ENC_L_PIN_B), Encoder4(ENC_R_PIN_A, ENC_R_PIN_B)}; enc[0] = new Encoder4(ENC_L_PIN_A, ENC_L_PIN_B);
enc_val[] = {INITIAL_ENC_L_VALUE, INITIAL_ENC_R_VALUE}; enc[1] = new Encoder4(ENC_R_PIN_A, ENC_R_PIN_B);
but[] = {Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS), Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS)}; enc_val[0] = INITIAL_ENC_L_VALUE;
enc_val[1] = INITIAL_ENC_R_VALUE;
but[0] = new Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS);
but[1] = new Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS);
}
UI::~UI()
{
;
} }

@ -36,9 +36,9 @@ class UI
~UI(); ~UI();
private: private:
LiquidCrystalPlus_I2C lcd; LiquidCrystalPlus_I2C* lcd;
Encoder4 enc[2]; Encoder4* enc[2];
int32_t enc_val[2]; int32_t enc_val[2];
Bounce but[2]; Bounce* but[2];
} };
#endif #endif

@ -26,6 +26,13 @@
#include "midinotes.h" #include "midinotes.h"
#define DELAY_R_MS 10.0
#define DELAY_L_MS 10.0
#define DELAY_R_INTENSITY 0.5
#define DELAY_L_INTENSITY 0.5
#define DELAY_FRQ 1.0
#define DELAY_VOLUME 0.5
// ATTENTION! For better latency you have to redefine AUDIO_BLOCK_SAMPLES from // ATTENTION! For better latency you have to redefine AUDIO_BLOCK_SAMPLES from
// 128 to 64 in <ARDUINO-IDE-DIR>/cores/teensy3/AudioStream.h // 128 to 64 in <ARDUINO-IDE-DIR>/cores/teensy3/AudioStream.h

Loading…
Cancel
Save