Fix and UI improvments for panorama.

pull/8/head
Holger Wirtz 5 years ago
parent d1577d4ef1
commit f03960fb75
  1. 187
      MicroDexed.ino
  2. 27
      UI.hpp
  3. 2
      config.h

@ -414,120 +414,120 @@ void loop()
//while (42 == 42) //while (42 == 42)
//{ //{
#ifdef OLD #ifdef OLD
// Main sound calculation // Main sound calculation
if (queue1.available() && fill_audio_buffer > audio_block_time_us - 10) if (queue1.available() && fill_audio_buffer > audio_block_time_us - 10)
{ {
fill_audio_buffer = 0; fill_audio_buffer = 0;
audio_buffer = queue1.getBuffer(); audio_buffer = queue1.getBuffer();
elapsedMicros t1; elapsedMicros t1;
for (uint8_t i = 0; i < NUM_DEXED; i++) for (uint8_t i = 0; i < NUM_DEXED; i++)
{ {
MicroDexed[i]->getSamples(AUDIO_BLOCK_SAMPLES, audio_buffer); MicroDexed[i]->getSamples(AUDIO_BLOCK_SAMPLES, audio_buffer);
}
if (t1 > audio_block_time_us) // everything greater 2.9ms is a buffer underrun!
xrun++;
if (t1 > render_time_max)
render_time_max = t1;
if (peak1.available())
{
if (peak1.read() > 0.99)
peak++;
}
queue1.playBuffer();
} }
#endif if (t1 > audio_block_time_us) // everything greater 2.9ms is a buffer underrun!
xrun++;
// EEPROM update handling if (t1 > render_time_max)
if (autostore >= AUTOSTORE_MS && active_voices == 0 && eeprom_update_flag == true) render_time_max = t1;
if (peak1.available())
{ {
// only store configuration data to EEPROM when AUTOSTORE_MS is reached and no voices are activated anymore if (peak1.read() > 0.99)
eeprom_update(); peak++;
} }
queue1.playBuffer();
}
#endif
// MIDI input handling // EEPROM update handling
check_midi_devices(); if (autostore >= AUTOSTORE_MS && active_voices == 0 && eeprom_update_flag == true)
{
// only store configuration data to EEPROM when AUTOSTORE_MS is reached and no voices are activated anymore
eeprom_update();
}
// CONTROL-RATE-EVENT-HANDLING // MIDI input handling
if (control_rate > CONTROL_RATE_MS) check_midi_devices();
{
// CONTROL-RATE-EVENT-HANDLING
if (control_rate > CONTROL_RATE_MS)
{
#ifdef ENABLE_LCD_UI #ifdef ENABLE_LCD_UI
// LCD Menu // LCD Menu
LCDML.loop(); LCDML.loop();
// initial starts voice selection menu as default // initial starts voice selection menu as default
if (menu_state == MENU_START) if (menu_state == MENU_START)
{ {
menu_state = MENU_VOICE; menu_state = MENU_VOICE;
UI_func_voice_selection(0); UI_func_voice_selection(0);
} }
#endif #endif
control_rate = 0; control_rate = 0;
// check for value changes and unused voices // check for value changes and unused voices
soften_volume.tick(); soften_volume.tick();
for (uint8_t i = 0; i < NUM_DEXED; i++) for (uint8_t i = 0; i < NUM_DEXED; i++)
{ {
active_voices = MicroDexed[i]->getNumNotesPlaying(); active_voices = MicroDexed[i]->getNumNotesPlaying();
soften_filter_res[i].tick(); soften_filter_res[i].tick();
soften_filter_cut[i].tick(); soften_filter_cut[i].tick();
if (soften_filter_res[i].running()) if (soften_filter_res[i].running())
{ {
// soften filter resonance value // soften filter resonance value
MicroDexed[i]->fx.Reso = soften_filter_res[i].value(); MicroDexed[i]->fx.Reso = soften_filter_res[i].value();
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Filter-Resonance: ")); Serial.print(F("Filter-Resonance: "));
Serial.print(MicroDexed[i]->fx.Reso, 5); Serial.print(MicroDexed[i]->fx.Reso, 5);
Serial.print(F(" Filter-Resonance step: ")); Serial.print(F(" Filter-Resonance step: "));
Serial.print(soften_filter_res[i].steps()); Serial.print(soften_filter_res[i].steps());
Serial.print(F(" Filter-Resonance diff: ")); Serial.print(F(" Filter-Resonance diff: "));
Serial.println(soften_filter_res[i].diff(), 5); Serial.println(soften_filter_res[i].diff(), 5);
#endif #endif
}
// soften filter cutoff value
if (soften_filter_cut[i].running())
{
MicroDexed[i]->fx.Cutoff = soften_filter_cut[i].value();
#ifdef DEBUG
Serial.print(F("Filter-Cutoff: "));
Serial.print(MicroDexed[i]->fx.Cutoff, 5);
Serial.print(F(" Filter-Cutoff step: "));
Serial.print(soften_filter_cut[i].steps());
Serial.print(F(" Filter-Cutoff diff: "));
Serial.println(soften_filter_cut[i].diff(), 5);
#endif
}
} }
if (soften_volume.running()) // soften filter cutoff value
if (soften_filter_cut[i].running())
{ {
set_volume(soften_volume.value(), configuration.pan, configuration.mono); MicroDexed[i]->fx.Cutoff = soften_filter_cut[i].value();
#ifdef DEBUG #ifdef DEBUG
Serial.print(F("Volume: ")); Serial.print(F("Filter-Cutoff: "));
Serial.print(configuration.vol, DEC); Serial.print(MicroDexed[i]->fx.Cutoff, 5);
Serial.print(F(" step: ")); Serial.print(F(" Filter-Cutoff step: "));
Serial.print(soften_volume.steps()); Serial.print(soften_filter_cut[i].steps());
Serial.print(F(" diff: ")); Serial.print(F(" Filter-Cutoff diff: "));
Serial.println(soften_volume.diff(), 5); Serial.println(soften_filter_cut[i].diff(), 5);
#endif #endif
} }
} }
if (soften_volume.running())
{
set_volume(soften_volume.value(), configuration.pan, configuration.mono);
#ifdef DEBUG
Serial.print(F("Volume: "));
Serial.print(configuration.vol, DEC);
Serial.print(F(" step: "));
Serial.print(soften_volume.steps());
Serial.print(F(" diff: "));
Serial.println(soften_volume.diff(), 5);
#endif
}
}
#if defined (DEBUG) && defined (SHOW_CPU_LOAD_MSEC) #if defined (DEBUG) && defined (SHOW_CPU_LOAD_MSEC)
if (cpu_mem_millis >= SHOW_CPU_LOAD_MSEC) if (cpu_mem_millis >= SHOW_CPU_LOAD_MSEC)
{
if (peak1.available())
{ {
if (peak1.available()) if (peak1.read() > 0.99)
{ peak++;
if (peak1.read() > 0.99)
peak++;
}
cpu_mem_millis -= SHOW_CPU_LOAD_MSEC;
show_cpu_and_mem_usage();
} }
cpu_mem_millis -= SHOW_CPU_LOAD_MSEC;
show_cpu_and_mem_usage();
}
#endif #endif
//} //}
} }
@ -547,7 +547,7 @@ void handleNoteOff(byte inChannel, byte inNumber, byte inVelocity)
{ {
if (checkMidiChannel(inChannel)) if (checkMidiChannel(inChannel))
{ {
MicroDexed[0]->keyup(inNumber); MicroDexed[0]->keyup(inNumber);
} }
} }
@ -1018,19 +1018,22 @@ void set_volume(uint8_t v, int8_t p, uint8_t m)
switch (m) switch (m)
{ {
case 0: case 0: // stereo
stereomono1.stereo(true); stereomono1.stereo(true);
break; break;
case 1: case 1: // mono both
stereomono1.stereo(false); stereomono1.stereo(false);
configuration.pan = 0.5;
break; break;
case 2: case 2: // mono right
volume_l.gain(0.0); volume_l.gain(0.0);
stereomono1.stereo(false); stereomono1.stereo(false);
configuration.pan = 0.5;
break; break;
case 3: case 3: // mono left
volume_r.gain(0.0); volume_r.gain(0.0);
stereomono1.stereo(false); stereomono1.stereo(false);
configuration.pan = 0.5;
break; break;
} }
} }

@ -1428,6 +1428,11 @@ void UI_func_panorama(uint8_t param)
// setup function // setup function
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
lcd.print(F("Panorama")); lcd.print(F("Panorama"));
if (configuration.mono > 0)
{
lcd.setCursor(0, 1);
lcd.print(F("MONO-disabled"));
}
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -1436,24 +1441,28 @@ void UI_func_panorama(uint8_t param)
{ {
LCDML.FUNC_goBackToMenu(); LCDML.FUNC_goBackToMenu();
} }
else if (LCDML.BT_checkDown()) else if (LCDML.BT_checkDown() && configuration.mono == 0)
{ {
if (configuration.pan < PANORAMA_MAX) if (configuration.pan < PANORAMA_MAX)
{ {
configuration.pan++; configuration.pan++;
} }
} }
else if (LCDML.BT_checkUp()) else if (LCDML.BT_checkUp() && configuration.mono == 0)
{ {
if (configuration.pan > PANORAMA_MIN) if (configuration.pan > PANORAMA_MIN)
{ {
configuration.pan--; configuration.pan--;
} }
} }
lcd.setCursor(0, 1);
lcd_display_int(configuration.pan, 2, false, true, true);
set_volume(configuration.vol, configuration.pan, configuration.mono); if (configuration.mono == 0)
{
lcd.setCursor(0, 1);
lcd_display_int(configuration.pan, 2, false, true, true);
set_volume(configuration.vol, configuration.pan, configuration.mono);
}
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
@ -1496,13 +1505,13 @@ void UI_func_stereo_mono(uint8_t param)
switch (configuration.mono) switch (configuration.mono)
{ {
case 0: case 0:
lcd.print(F("[MONO ]"));
stereomono1.stereo(false);
break;
case 1:
lcd.print(F("[STEREO]")); lcd.print(F("[STEREO]"));
stereomono1.stereo(true); stereomono1.stereo(true);
break; break;
case 1:
lcd.print(F("[MONO ]"));
stereomono1.stereo(false);
break;
case 2: case 2:
lcd.print(F("[MONO-R]")); lcd.print(F("[MONO-R]"));
stereomono1.stereo(false); stereomono1.stereo(false);

@ -265,7 +265,7 @@
#else #else
#define MONO_MIN 0 #define MONO_MIN 0
#define MONO_MAX 3 #define MONO_MAX 3
#define MONO_DEFAULT 1 #define MONO_DEFAULT 0
#endif #endif
#define VOLUME_MIN 0 #define VOLUME_MIN 0

Loading…
Cancel
Save