|
|
@ -889,6 +889,49 @@ void loop() |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
|
|
MIDI HELPER |
|
|
|
|
|
|
|
******************************************************************************/ |
|
|
|
|
|
|
|
bool checkMidiChannel(byte inChannel, uint8_t instance_id) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// check for MIDI channel
|
|
|
|
|
|
|
|
if (configuration.dexed[instance_id].midi_channel == MIDI_CHANNEL_OMNI) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return (true); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (inChannel != configuration.dexed[instance_id].midi_channel) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
|
|
|
Serial.print(F("INSTANCE ")); |
|
|
|
|
|
|
|
Serial.print(instance_id, DEC); |
|
|
|
|
|
|
|
Serial.print(F(": Ignoring MIDI data on channel ")); |
|
|
|
|
|
|
|
Serial.print(inChannel); |
|
|
|
|
|
|
|
Serial.print(F("(listening on ")); |
|
|
|
|
|
|
|
Serial.print(configuration.dexed[instance_id].midi_channel); |
|
|
|
|
|
|
|
Serial.println(F(")")); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
return (false); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return (true); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void init_MIDI_send_CC(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
|
|
|
|
Serial.println("init_MIDI_send_CC():"); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 7, configuration.dexed[selected_instance_id].sound_intensity); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 10, configuration.dexed[selected_instance_id].pan); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 91, configuration.fx.reverb_send[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 93, configuration.fx.chorus_level[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 94, configuration.dexed[selected_instance_id].tune); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 103, configuration.fx.filter_resonance[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 104, configuration.fx.filter_cutoff[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 105, configuration.fx.delay_time[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 106, configuration.fx.delay_feedback[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 107, configuration.fx.delay_level[selected_instance_id]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
/******************************************************************************
|
|
|
|
MIDI MESSAGE HANDLER |
|
|
|
MIDI MESSAGE HANDLER |
|
|
|
******************************************************************************/ |
|
|
|
******************************************************************************/ |
|
|
@ -1077,7 +1120,6 @@ void handleNoteOff(byte inChannel, byte inNumber, byte inVelocity) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(USE_EPIANO) |
|
|
|
#if defined(USE_EPIANO) |
|
|
|
if (configuration.epiano.midi_channel == MIDI_CHANNEL_OMNI || configuration.epiano.midi_channel == inChannel) |
|
|
|
if (configuration.epiano.midi_channel == MIDI_CHANNEL_OMNI || configuration.epiano.midi_channel == inChannel) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -1775,20 +1817,6 @@ void handleClock(void) |
|
|
|
midi_bpm_counter++; |
|
|
|
midi_bpm_counter++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void dac_mute(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
sgtl5000.lineOutLevel(0.0); |
|
|
|
|
|
|
|
sgtl5000.dacVolume(0.0); |
|
|
|
|
|
|
|
sgtl5000.volume(0.0, 0.0); // Headphone volume
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void dac_unmute(void) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
sgtl5000.lineOutLevel(SGTL5000_LINEOUT_LEVEL); |
|
|
|
|
|
|
|
sgtl5000.dacVolume(1.0); |
|
|
|
|
|
|
|
sgtl5000.volume(SGTL5000_HEADPHONE_VOLUME, SGTL5000_HEADPHONE_VOLUME); // Headphone volume
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void handleStart(void) |
|
|
|
void handleStart(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
midi_bpm_timer = 0; |
|
|
|
midi_bpm_timer = 0; |
|
|
@ -1828,52 +1856,22 @@ void handleSystemReset(void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
/******************************************************************************
|
|
|
|
MIDI HELPER |
|
|
|
VOLUME HELPER |
|
|
|
******************************************************************************/ |
|
|
|
******************************************************************************/ |
|
|
|
bool checkMidiChannel(byte inChannel, uint8_t instance_id) |
|
|
|
void dac_mute(void) |
|
|
|
{ |
|
|
|
|
|
|
|
// check for MIDI channel
|
|
|
|
|
|
|
|
if (configuration.dexed[instance_id].midi_channel == MIDI_CHANNEL_OMNI) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return (true); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (inChannel != configuration.dexed[instance_id].midi_channel) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef DEBUG |
|
|
|
sgtl5000.lineOutLevel(0.0); |
|
|
|
Serial.print(F("INSTANCE ")); |
|
|
|
sgtl5000.dacVolume(0.0); |
|
|
|
Serial.print(instance_id, DEC); |
|
|
|
sgtl5000.volume(0.0, 0.0); // Headphone volume
|
|
|
|
Serial.print(F(": Ignoring MIDI data on channel ")); |
|
|
|
|
|
|
|
Serial.print(inChannel); |
|
|
|
|
|
|
|
Serial.print(F("(listening on ")); |
|
|
|
|
|
|
|
Serial.print(configuration.dexed[instance_id].midi_channel); |
|
|
|
|
|
|
|
Serial.println(F(")")); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
return (false); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return (true); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void init_MIDI_send_CC(void) |
|
|
|
void dac_unmute(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef DEBUG |
|
|
|
sgtl5000.lineOutLevel(SGTL5000_LINEOUT_LEVEL); |
|
|
|
Serial.println("init_MIDI_send_CC():"); |
|
|
|
sgtl5000.dacVolume(1.0); |
|
|
|
#endif |
|
|
|
sgtl5000.volume(SGTL5000_HEADPHONE_VOLUME, SGTL5000_HEADPHONE_VOLUME); // Headphone volume
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 7, configuration.dexed[selected_instance_id].sound_intensity); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 10, configuration.dexed[selected_instance_id].pan); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 91, configuration.fx.reverb_send[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 93, configuration.fx.chorus_level[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 94, configuration.dexed[selected_instance_id].tune); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 103, configuration.fx.filter_resonance[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 104, configuration.fx.filter_cutoff[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 105, configuration.fx.delay_time[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 106, configuration.fx.delay_feedback[selected_instance_id]); |
|
|
|
|
|
|
|
MD_sendControlChange(configuration.dexed[selected_instance_id].midi_channel, 107, configuration.fx.delay_level[selected_instance_id]); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
|
|
|
VOLUME HELPER |
|
|
|
|
|
|
|
******************************************************************************/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void set_drums_volume(float vol) |
|
|
|
void set_drums_volume(float vol) |
|
|
|
{ |
|
|
|
{ |
|
|
|
master_mixer_r.gain(MASTER_MIX_CH_DRUMS, vol); |
|
|
|
master_mixer_r.gain(MASTER_MIX_CH_DRUMS, vol); |
|
|
|