Added Mono/Stereo switch.

dev
Holger Wirtz 5 years ago
parent c77cbcf8fb
commit e69c007b63
  1. 17
      MicroMDAEPiano.ino
  2. 97
      UI.hpp
  3. 11
      config.h
  4. 2
      mdaEPiano.cpp

@ -147,6 +147,7 @@ config_t configuration = {
ENC_MIDI_CHANNEL_DEFAULT, // midi_channel ENC_MIDI_CHANNEL_DEFAULT, // midi_channel
ENC_MIDI_SOFT_THRU_DEFAULT, // midi_soft_thru ENC_MIDI_SOFT_THRU_DEFAULT, // midi_soft_thru
ENC_MAX_POLY_DEFAULT, // max_poly ENC_MAX_POLY_DEFAULT, // max_poly
ENC_MONO_DEFAULT, // mono
ENC_MASTER_PAN_DEFAULT // pan ENC_MASTER_PAN_DEFAULT // pan
}; };
@ -245,11 +246,6 @@ void setup()
modulator.phase(0); modulator.phase(0);
modulator.amplitude(1.0); modulator.amplitude(1.0);
modulator.offset(0.0); modulator.offset(0.0);
#ifdef MOD_STEREO
inverter.gain(-1.0); // change phase for second modulated delay (faked stereo mode)
#else
inverter.gain(1.0);
#endif
modchorus_r.offset(15.0); modchorus_r.offset(15.0);
modchorus_l.offset(15.0); modchorus_l.offset(15.0);
// Butterworth filter, 12 db/octave // Butterworth filter, 12 db/octave
@ -277,6 +273,17 @@ void setup()
mixer_r.gain(VOL_CHORUS, 0.2); mixer_r.gain(VOL_CHORUS, 0.2);
mixer_l.gain(VOL_CHORUS, 0.2); mixer_l.gain(VOL_CHORUS, 0.2);
// Stereo/Mono initial setup
if (configuration.mono == false)
{
inverter.gain(-1.0); // change phase for second modulated delay (faked stereo mode)
}
else
{
inverter.gain(1.0);
configuration.pan = ENC_MASTER_PAN_DEFAULT;
}
// set master volume // set master volume
set_master_volume(master_volume); set_master_volume(master_volume);

@ -28,16 +28,16 @@
const uint8_t MAX_VARIABLES = 5; ///< @note Default: 5 const uint8_t MAX_VARIABLES = 5; ///< @note Default: 5
/// Configures the number of available functions per line. /// Configures the number of available functions per line.
const uint8_t MAX_FUNCTIONS = 42; ///< @note Default: 8 const uint8_t MAX_FUNCTIONS = 43; ///< @note Default: 8
/// Configures the number of available lines per screen. /// Configures the number of available lines per screen.
const uint8_t MAX_LINES = 20; ///< @note Default: 12 const uint8_t MAX_LINES = 22; ///< @note Default: 12
/// Configures the number of available screens per menu. /// Configures the number of available screens per menu.
const uint8_t MAX_SCREENS = 2; ///< @note Default: 14 const uint8_t MAX_SCREENS = 2; ///< @note Default: 14
/// Configures the number of available menus per menus system. /// Configures the number of available menus per menus system.
const uint8_t MAX_MENUS = 45; ///< @note Default: 8 const uint8_t MAX_MENUS = 46; ///< @note Default: 8
*/ */
@ -56,7 +56,7 @@ int32_t encoder_value[NUM_ENCODER];
Bounce but[NUM_ENCODER] = {Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS), Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS)}; Bounce but[NUM_ENCODER] = {Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS), Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS)};
elapsedMillis back_to_main; elapsedMillis back_to_main;
#define NUM_MENUS 45 #define NUM_MENUS 46
#define MAIN 0 #define MAIN 0
/*************************************/ /*************************************/
@ -104,10 +104,11 @@ elapsedMillis back_to_main;
#define MIDI_CHANNEL 39 #define MIDI_CHANNEL 39
#define MIDI_SOFT_THRU 40 #define MIDI_SOFT_THRU 40
#define MAX_POLY 41 #define MAX_POLY 41
#define MONO 42
/*************************************/ /*************************************/
#define STORE_QUESTION 42 #define STORE_QUESTION 43
/*************************************/ /*************************************/
#define MASTER_VOLUME 43 #define MASTER_VOLUME 44
/*************************************/ /*************************************/
int8_t menu_position[NUM_MENUS]; int8_t menu_position[NUM_MENUS];
@ -132,6 +133,7 @@ extern AudioMixer4 mixer_r;
extern AudioMixer4 mixer_l; extern AudioMixer4 mixer_l;
extern AudioAmplifier volume_r; extern AudioAmplifier volume_r;
extern AudioAmplifier volume_l; extern AudioAmplifier volume_l;
extern AudioAmplifier inverter;
extern mdaEPiano* ep; extern mdaEPiano* ep;
extern config_t configuration; extern config_t configuration;
extern uint8_t sound; extern uint8_t sound;
@ -285,6 +287,17 @@ char* get_midi_soft_thru_value_text(void)
return (midi_soft_thru_value_text1); return (midi_soft_thru_value_text1);
} }
char mono_value_text1[] = " ";
char* get_mono_value_text(void)
{
if (configuration.mono == 0)
sprintf(mono_value_text1, "Stereo");
else
sprintf(mono_value_text1, "Mono ");
return (mono_value_text1);
}
char yes_no_value_text1[] = " "; char yes_no_value_text1[] = " ";
char* get_yes_no_value_text(void) char* get_yes_no_value_text(void)
{ {
@ -727,15 +740,17 @@ LiquidMenu save_sound_menu(lcd);
/****************************************** /******************************************
SYSTEM MENU SYSTEM MENU
******************************************/ ******************************************/
#define NUM_SYSTEM_MENUS 4 #define NUM_SYSTEM_MENUS 5
const char system_text1[] PROGMEM = "Loudness"; const char system_text1[] PROGMEM = "Loudness";
const char system_text2[] PROGMEM = "MIDI Channel"; const char system_text2[] PROGMEM = "MIDI Channel";
const char system_text3[] PROGMEM = "MIDI Soft-Thru"; const char system_text3[] PROGMEM = "MIDI Soft-Thru";
const char system_text4[] PROGMEM = "Max. Polyphony"; const char system_text4[] PROGMEM = "Max. Polyphony";
const char system_text5[] PROGMEM = "Mono/Stereo";
LiquidLine system_line1(1, 0, system_text1); LiquidLine system_line1(1, 0, system_text1);
LiquidLine system_line2(1, 1, system_text2); LiquidLine system_line2(1, 1, system_text2);
LiquidLine system_line3(1, 1, system_text3); LiquidLine system_line3(1, 1, system_text3);
LiquidLine system_line4(1, 1, system_text4); LiquidLine system_line4(1, 1, system_text4);
LiquidLine system_line5(1, 1, system_text5);
LiquidScreen system_screen; LiquidScreen system_screen;
LiquidMenu system_menu(lcd); LiquidMenu system_menu(lcd);
@ -779,6 +794,16 @@ LiquidLine max_poly_line2(1, 1, configuration.max_poly);
LiquidScreen max_poly_screen; LiquidScreen max_poly_screen;
LiquidMenu max_poly_menu(lcd); LiquidMenu max_poly_menu(lcd);
/******************************************
MONO/STEREO MENU
******************************************/
#define NUM_MONO_MENUS 1
const char mono_text1[] PROGMEM = "Mono/Stereo";
LiquidLine mono_line1(1, 0, mono_text1);
LiquidLine mono_line2(1, 1, get_mono_value_text);
LiquidScreen mono_screen;
LiquidMenu mono_menu(lcd);
/****************************************** /******************************************
INFO MENU INFO MENU
******************************************/ ******************************************/
@ -1349,11 +1374,23 @@ void callback_max_poly_function(void)
#endif #endif
menu_system.change_menu(max_poly_menu); menu_system.change_menu(max_poly_menu);
menu_position[SYSTEM] = encoder_value[RIGHT_ENCODER]; menu_position[SYSTEM] = encoder_value[RIGHT_ENCODER];
encoder_value[RIGHT_ENCODER] = configuration. max_poly; encoder_value[RIGHT_ENCODER] = configuration.max_poly;
enc[RIGHT_ENCODER].write(configuration.max_poly, ENC_MAX_POLY_MIN, ENC_MAX_POLY_MAX); enc[RIGHT_ENCODER].write(configuration.max_poly, ENC_MAX_POLY_MIN, ENC_MAX_POLY_MAX);
menu_system.update(); menu_system.update();
} }
void callback_mono_function(void)
{
#ifdef SHOW_DEBUG
Serial.println(F("callback_mono_function"));
#endif
menu_system.change_menu(mono_menu);
menu_position[SYSTEM] = encoder_value[RIGHT_ENCODER];
encoder_value[RIGHT_ENCODER] = configuration.mono;
enc[RIGHT_ENCODER].write(configuration.mono, ENC_MONO_MIN, ENC_MONO_MAX);
menu_system.update();
}
/****************************************** /******************************************
INFO MENU CALLBACKS INFO MENU CALLBACKS
******************************************/ ******************************************/
@ -1757,6 +1794,7 @@ void init_menus(void)
system_screen.add_line(system_line2); system_screen.add_line(system_line2);
system_screen.add_line(system_line3); system_screen.add_line(system_line3);
system_screen.add_line(system_line4); system_screen.add_line(system_line4);
system_screen.add_line(system_line5);
system_screen.set_displayLineCount(2); system_screen.set_displayLineCount(2);
system_menu.add_screen(system_screen); system_menu.add_screen(system_screen);
@ -1764,6 +1802,7 @@ void init_menus(void)
system_line2.attach_function(MIDI_CHANNEL, callback_midi_channel_function); system_line2.attach_function(MIDI_CHANNEL, callback_midi_channel_function);
system_line3.attach_function(MIDI_SOFT_THRU, callback_midi_soft_thru_function); system_line3.attach_function(MIDI_SOFT_THRU, callback_midi_soft_thru_function);
system_line4.attach_function(MAX_POLY, callback_max_poly_function); system_line4.attach_function(MAX_POLY, callback_max_poly_function);
system_line5.attach_function(MONO, callback_mono_function);
// setup loudness // setup loudness
loudness_screen.add_line(loudness_line1); loudness_screen.add_line(loudness_line1);
@ -1789,6 +1828,12 @@ void init_menus(void)
max_poly_screen.set_displayLineCount(2); max_poly_screen.set_displayLineCount(2);
max_poly_menu.add_screen(max_poly_screen); max_poly_menu.add_screen(max_poly_screen);
// setup mono
mono_screen.add_line(mono_line1);
mono_screen.add_line(mono_line2);
mono_screen.set_displayLineCount(2);
mono_menu.add_screen(mono_screen);
// setup info menu // setup info menu
info_screen.add_line(info_line1); info_screen.add_line(info_line1);
info_screen.add_line(info_line2); info_screen.add_line(info_line2);
@ -1845,6 +1890,7 @@ void init_menus(void)
menu_system.add_menu(midi_channel_menu); menu_system.add_menu(midi_channel_menu);
menu_system.add_menu(midi_soft_thru_menu); menu_system.add_menu(midi_soft_thru_menu);
menu_system.add_menu(max_poly_menu); menu_system.add_menu(max_poly_menu);
menu_system.add_menu(mono_menu);
menu_system.add_menu(info_menu); menu_system.add_menu(info_menu);
menu_system.add_menu(master_volume_menu); menu_system.add_menu(master_volume_menu);
@ -2359,6 +2405,24 @@ void set_max_poly(uint8_t value)
ep->reset_voices(); ep->reset_voices();
} }
void set_mono(uint8_t mode)
{
#ifdef SHOW_DEBUG
Serial.print(F("Set MONO "));
Serial.println(mode);
#endif
if (mode == 0)
{
set_stereo(configuration.stereo);
inverter.gain(-1.0); // change phase for second modulated delay (faked stereo mode)
}
else
{
set_stereo(ENC_STEREO_MIN);
inverter.gain(1.0);
}
}
void set_complete_configuration(void) void set_complete_configuration(void)
{ {
set_decay(configuration.decay); set_decay(configuration.decay);
@ -2395,6 +2459,7 @@ void set_complete_configuration(void)
set_midi_channel(configuration.midi_channel); set_midi_channel(configuration.midi_channel);
set_midi_soft_thru(configuration.midi_soft_thru); set_midi_soft_thru(configuration.midi_soft_thru);
set_max_poly(configuration.max_poly); set_max_poly(configuration.max_poly);
set_mono(configuration.mono);
} }
//********************************************************************************************+ //********************************************************************************************+
@ -2765,6 +2830,15 @@ void handle_ui(void)
menu_system.update(); menu_system.update();
} }
} }
else if (menu_system.get_currentScreen() == &mono_screen)
{
if (encoder_tmp != encoder_value[RIGHT_ENCODER])
{
// value up/down
set_mono(encoder_tmp);
menu_system.update();
}
}
else else
{ {
// Move menu focus // Move menu focus
@ -3199,6 +3273,13 @@ void handle_ui(void)
#endif #endif
goto_system_menu(MAX_POLY); goto_system_menu(MAX_POLY);
} }
else if (menu_system.get_currentScreen() == &mono_screen) // mono menu
{
#ifdef SHOW_DEBUG
Serial.println(F("from mono to system"));
#endif
goto_system_menu(MONO);
}
else if (menu_system.get_currentScreen() == &info_screen) // info menu else if (menu_system.get_currentScreen() == &info_screen) // info menu
{ {
#ifdef SHOW_DEBUG #ifdef SHOW_DEBUG

@ -31,7 +31,7 @@
// 128 to 64 in <ARDUINO-IDE-DIR>/cores/teensy3/AudioStream.h // 128 to 64 in <ARDUINO-IDE-DIR>/cores/teensy3/AudioStream.h
// arecord -f cd -Dhw:1,0 /tmp/bla.wav // arecord -f cd -Dhw:1,0 /tmp/bla.wav
// aplaymidi -p 20:0 test.mid // aplaymidi -p 20:0 test.mid
//************************************************************************************************* //*************************************************************************************************
//* DEVICE SETTINGS //* DEVICE SETTINGS
@ -60,7 +60,7 @@
// CHORUS parameters // CHORUS parameters
#define CHORUS_DELAY_LENGTH_SAMPLES (16*AUDIO_BLOCK_SAMPLES) // one AUDIO_BLOCK_SAMPLES = 2.902ms #define CHORUS_DELAY_LENGTH_SAMPLES (16*AUDIO_BLOCK_SAMPLES) // one AUDIO_BLOCK_SAMPLES = 2.902ms
#define WAVEFORM_MOD WAVEFORM_TRIANGLE // WAVEFORM_SINE WAVEFORM_TRIANGLE WAVEFORM_SAWTOOTH WAVEFORM_SAWTOOTH_REVERSE #define WAVEFORM_MOD WAVEFORM_TRIANGLE // WAVEFORM_SINE WAVEFORM_TRIANGLE WAVEFORM_SAWTOOTH WAVEFORM_SAWTOOTH_REVERSE
//#define MOD_STEREO 1
//************************************************************************************************* //*************************************************************************************************
//* DEBUG OUTPUT SETTINGS //* DEBUG OUTPUT SETTINGS
//************************************************************************************************* //*************************************************************************************************
@ -99,7 +99,7 @@
30: 1.22 Volts p-p 30: 1.22 Volts p-p
31: 1.16 Volts p-p 31: 1.16 Volts p-p
*/ */
#define SGTL5000_LINEOUT_LEVEL 26 #define SGTL5000_LINEOUT_LEVEL 25
//#define SDCARD_CS_PIN 10 //#define SDCARD_CS_PIN 10
//#define SDCARD_MOSI_PIN 7 //#define SDCARD_MOSI_PIN 7
//#define SDCARD_SCK_PIN 14 //#define SDCARD_SCK_PIN 14
@ -286,6 +286,10 @@
#define ENC_MAX_POLY_MAX NVOICES #define ENC_MAX_POLY_MAX NVOICES
#define ENC_MAX_POLY_DEFAULT NVOICES #define ENC_MAX_POLY_DEFAULT NVOICES
// //
#define ENC_MONO_MIN 0 // stereo
#define ENC_MONO_MAX 1 // mono
#define ENC_MONO_DEFAULT 1
//
#define ENC_MASTER_VOLUME_MIN 0 #define ENC_MASTER_VOLUME_MIN 0
#define ENC_MASTER_VOLUME_MAX 99 #define ENC_MASTER_VOLUME_MAX 99
#define ENC_MASTER_VOLUME_DEFAULT 80 #define ENC_MASTER_VOLUME_DEFAULT 80
@ -351,6 +355,7 @@ struct config_t {
uint8_t midi_channel; uint8_t midi_channel;
bool midi_soft_thru; bool midi_soft_thru;
uint8_t max_poly; uint8_t max_poly;
uint8_t mono;
int8_t pan; int8_t pan;
}; };

@ -257,7 +257,7 @@ void mdaEPiano::setOverdrive(float value)
void mdaEPiano::setLoudness(float value) void mdaEPiano::setLoudness(float value)
{ {
//volume = value * 0.32258; // 0.00002 * 127^2 //volume = value * 0.32258; // 0.00002 * 127^2
volume = value * 0.18f; volume = value * 0.17f;
} }
void mdaEPiano::setParameter(int32_t index, float value) void mdaEPiano::setParameter(int32_t index, float value)

Loading…
Cancel
Save