Compare commits

...

2 Commits

Author SHA1 Message Date
Holger Wirtz 1dec1a1308 . 6 years ago
Holger Wirtz d8b7045057 Simple and stupid chorus... work, but is not nice. 6 years ago
  1. 63
      MicroMDAEPiano.ino
  2. 16
      UI.cpp
  3. 8
      UI.h
  4. 9
      config.h

@ -34,7 +34,7 @@
#else
#include "mdaEPianoData.h"
#endif
#if defined(MIDI_DEVICE_USB)
#ifdef MIDI_DEVICE_USB
#include <midi_UsbTransport.h>
#endif
#ifdef MIDI_DEVICE_USB_HOST
@ -44,7 +44,10 @@
#include "Encoder4.h"
#include "LiquidCrystalPlus_I2C.h"
#include "UI.h"
#include <BALibrary.h> // had rename libraries/BALibrary/src/peripherals/BAPhysicalControls.cpp
#include <BAEffects.h>
using namespace BAEffects;
//*************************************************************************************************
//* GLOBAL VARIABLES
@ -57,33 +60,40 @@ AudioAnalyzePeak peak_r;
AudioAnalyzePeak peak_l;
AudioEffectFreeverb freeverb_r;
AudioEffectFreeverb freeverb_l;
AudioMixer4 mixer_r;
AudioMixer4 mixer_l;
AudioMixer4 reverb_mixer_r;
AudioMixer4 reverb_mixer_l;
AudioEffectSimpleChorus chorus_r(20.0);
AudioEffectSimpleChorus chorus_l(20.0);
//BAEffects::AudioEffectAnalogDelay chorus_r(200.0);
//BAEffects::AudioEffectAnalogDelay chorus_l(200.0);
AudioConnection patchCord0(queue_r, peak_r);
AudioConnection patchCord1(queue_l, peak_l);
AudioConnection patchCord4(queue_r, freeverb_r);
AudioConnection patchCord5(queue_l, freeverb_l);
AudioConnection patchCord6(queue_r, 0, mixer_r, 0);
AudioConnection patchCord7(queue_l, 0, mixer_l, 0);
AudioConnection patchCord8(freeverb_r, 0, mixer_r, 1);
AudioConnection patchCord9(freeverb_l, 0, mixer_l, 1);
AudioConnection patchCord2(queue_r, chorus_r);
AudioConnection patchCord3(queue_l, chorus_l);
AudioConnection patchCord4(chorus_r, freeverb_r);
AudioConnection patchCord5(chorus_l, freeverb_l);
AudioConnection patchCord6(chorus_r, 0, reverb_mixer_r, 0);
AudioConnection patchCord7(chorus_l, 0, reverb_mixer_l, 0);
AudioConnection patchCord8(freeverb_r, 0, reverb_mixer_r, 1);
AudioConnection patchCord9(freeverb_l, 0, reverb_mixer_l, 1);
#ifdef TEENSY_AUDIO_BOARD
AudioOutputI2S i2s1;
AudioConnection patchCord110(mixer_r, 0, i2s1, 0);
AudioConnection patchCord111(mixer_l, 0, i2s1, 1);
AudioConnection patchCord10(reverb_mixer_r, 0, i2s1, 0);
AudioConnection patchCord11(reverb_mixer_l, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1;
#else
AudioOutputPT8211 pt8211_1;
AudioAmplifier volume_r;
AudioAmplifier volume_l;
AudioConnection patchCord10(mixer_r, volume_r);
AudioConnection patchCord11(mixer_l, volume_l);
AudioConnection patchCord10(reverb_mixer_r, volume_r);
AudioConnection patchCord11(reverb_mixer_l, volume_l);
AudioConnection patchCord12(volume_r, 0, pt8211_1, 1);
AudioConnection patchCord13(volume_l, 0, pt8211_1, 0);
#endif
// Objects
mdaEPiano* ep;
BALibrary::LowFrequencyOscillatorVector<float> chorus_lfo;
#ifdef MIDI_DEVICE_DIN
MIDI_CREATE_INSTANCE(HardwareSerial, MIDI_DEVICE_DIN, midi_serial);
@ -105,7 +115,7 @@ uint32_t xrun = 0;
uint32_t overload = 0;
uint32_t peak = 0;
uint16_t render_time_max = 0;
float vol = VOLUME;
float vol = _VOLUME;
float vol_right = 1.0;
float vol_left = 1.0;
elapsedMicros fill_audio_buffer;
@ -127,6 +137,7 @@ void setup()
Serial.begin(SERIAL_SPEED);
delay(220);
/*
// LCD display setup
lcd.init();
lcd.blink_off();
@ -145,7 +156,7 @@ void setup()
enc_val[1] = enc[1].read();
but[0].update();
but[1].update();
*/
// Debug output
Serial.println(F("MicroMDAEPiano based on https://sourceforge.net/projects/mda-vst"));
Serial.println(F("(c)2018 H. Wirtz <wirtz@parasitstudio.de>"));
@ -208,6 +219,7 @@ void setup()
Serial.print(1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES));
Serial.println(F("ms)"));
// Epiano
ep->setParameter(DECAY, 0.5);
ep->setParameter(RELEASE, 0.5);
ep->setParameter(HARDNESS, 0.7);
@ -217,14 +229,27 @@ void setup()
ep->setParameter(STEREO, 0.7);
ep->setParameter(OVERDRIVE, 0.3);
// Reverb
freeverb_r.roomsize(0.2);
freeverb_l.roomsize(0.2);
freeverb_r.damping(0.5);
freeverb_l.damping(0.5);
mixer_r.gain(0, 0.7);
mixer_l.gain(0, 0.7);
mixer_r.gain(1, 0.3);
mixer_l.gain(1, 0.3);
reverb_mixer_r.gain(0, 1.0);
reverb_mixer_l.gain(0, 1.0);
reverb_mixer_r.gain(1, 0.0);
reverb_mixer_l.gain(1, 0.0);
// Chorus
chorus_r.enable();
chorus_r.bypass(false);
chorus_r.frequency(1.0f);
chorus_r.mix(0.5f);
chorus_r.intensity(0.5f);
chorus_l.enable();
chorus_r.bypass(false);
chorus_l.frequency(1.0f);
chorus_l.mix(0.5f);
chorus_l.intensity(0.5f);
Serial.println(F("<setup end>"));

@ -26,8 +26,16 @@
UI::UI()
{
LiquidCrystalPlus_I2C lcd(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_val[] = {INITIAL_ENC_L_VALUE, INITIAL_ENC_R_VALUE};
but[] = {Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS), Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS)};
lcd=new LiquidCrystalPlus_I2C(LCD_I2C_ADDRESS, LCD_CHARS, LCD_LINES);
enc[0] = new Encoder4(ENC_L_PIN_A, ENC_L_PIN_B);
enc[1] = new Encoder4(ENC_R_PIN_A, ENC_R_PIN_B);
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();
private:
LiquidCrystalPlus_I2C lcd;
Encoder4 enc[2];
LiquidCrystalPlus_I2C* lcd;
Encoder4* enc[2];
int32_t enc_val[2];
Bounce but[2];
}
Bounce* but[2];
};
#endif

@ -26,6 +26,13 @@
#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
// 128 to 64 in <ARDUINO-IDE-DIR>/cores/teensy3/AudioStream.h
@ -52,7 +59,7 @@
//* AUDIO SETTINGS
//*************************************************************************************************
#define VOLUME 0.8
#define _VOLUME 0.8
#define AUDIO_MEM 128
#define SAMPLE_RATE 44100
#define REDUCE_LOUDNESS 1

Loading…
Cancel
Save