|
|
@ -339,17 +339,12 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign |
|
|
|
uint8_t par = pMessage[4]; |
|
|
|
uint8_t par = pMessage[4]; |
|
|
|
uint8_t val = pMessage[5]; |
|
|
|
uint8_t val = pMessage[5]; |
|
|
|
|
|
|
|
|
|
|
|
// For all parameters except "Set MIDI Channel", only process for the TG matching the MIDI channel.
|
|
|
|
// For parameter 1 (Set MIDI Channel), only process for the TG with the number in pMessage[2]
|
|
|
|
// For "Set MIDI Channel" message, apply that to the TG with the number in pMessage[2],
|
|
|
|
|
|
|
|
// NOT to the TG that is set to the MIDI channel in pMessage[2].
|
|
|
|
|
|
|
|
// This may not entirely be true to the TX216/TX816, but it is more suitable for MiniDexed.
|
|
|
|
|
|
|
|
if (par != 1 && nTG != mTG) continue; |
|
|
|
|
|
|
|
if (par == 1) { |
|
|
|
if (par == 1) { |
|
|
|
// Only process Set MIDI Channel for the TG with the number in pMessage[2]
|
|
|
|
|
|
|
|
if (nTG != mTG) continue; |
|
|
|
if (nTG != mTG) continue; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
// For all other parameters, only process for the TG matching the MIDI channel
|
|
|
|
// For all other parameters, process for all TGs listening on the MIDI channel mTG or OmniMode
|
|
|
|
if (!(m_ChannelMap[nTG] == ucSysExChannel || m_ChannelMap[nTG] == OmniMode)) continue; |
|
|
|
if (!(m_ChannelMap[nTG] == mTG || m_ChannelMap[nTG] == OmniMode)) continue; |
|
|
|
} |
|
|
|
} |
|
|
|
LOGNOTE("MIDI-SYSEX: Assuming TX216/TX816 style performance sysex message because 4th byte is 0x04"); |
|
|
|
LOGNOTE("MIDI-SYSEX: Assuming TX216/TX816 style performance sysex message because 4th byte is 0x04"); |
|
|
|
|
|
|
|
|
|
|
@ -360,75 +355,73 @@ void CMIDIDevice::MIDIMessageHandler (const u8 *pMessage, size_t nLength, unsign |
|
|
|
m_pSynthesizer->SetMIDIChannel(val & 0x0F, mTG); |
|
|
|
m_pSynthesizer->SetMIDIChannel(val & 0x0F, mTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 2: // Poly/Mono
|
|
|
|
case 2: // Poly/Mono
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Poly/Mono %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Poly/Mono %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setMonoMode(val ? true : false, mTG); |
|
|
|
m_pSynthesizer->setMonoMode(val ? true : false, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 3: // Pitch Bend Range
|
|
|
|
case 3: // Pitch Bend Range
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Pitch Bend Range %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Pitch Bend Range %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setPitchbendRange(val, mTG); |
|
|
|
m_pSynthesizer->setPitchbendRange(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 4: // Pitch Bend Step
|
|
|
|
case 4: // Pitch Bend Step
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Pitch Bend Step %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Pitch Bend Step %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setPitchbendStep(val, mTG); |
|
|
|
m_pSynthesizer->setPitchbendStep(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 5: // Portamento Time
|
|
|
|
case 5: // Portamento Time
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Portamento Time %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Portamento Time %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setPortamentoTime(val, mTG); |
|
|
|
m_pSynthesizer->setPortamentoTime(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 6: // Portamento/Glissando
|
|
|
|
case 6: // Portamento/Glissando
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Portamento/Glissando %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Portamento/Glissando %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setPortamentoGlissando(val, mTG); |
|
|
|
m_pSynthesizer->setPortamentoGlissando(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 7: // Portamento Mode
|
|
|
|
case 7: // Portamento Mode
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Portamento Mode %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Portamento Mode %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setPortamentoMode(val, mTG); |
|
|
|
m_pSynthesizer->setPortamentoMode(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 9: // Mod Wheel Sensitivity
|
|
|
|
case 9: // Mod Wheel Sensitivity
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Mod Wheel Sensitivity %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Mod Wheel Sensitivity %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setModWheelRange(val, mTG); |
|
|
|
m_pSynthesizer->setModWheelRange(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 10: // Mod Wheel Assign
|
|
|
|
case 10: // Mod Wheel Assign
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Mod Wheel Assign %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Mod Wheel Assign %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setModWheelTarget(val, mTG); |
|
|
|
m_pSynthesizer->setModWheelTarget(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 11: // Foot Controller Sensitivity
|
|
|
|
case 11: // Foot Controller Sensitivity
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Foot Controller Sensitivity %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Foot Controller Sensitivity %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setFootControllerRange(val, mTG); |
|
|
|
m_pSynthesizer->setFootControllerRange(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 12: // Foot Controller Assign
|
|
|
|
case 12: // Foot Controller Assign
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Foot Controller Assign %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Foot Controller Assign %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setFootControllerTarget(val, mTG); |
|
|
|
m_pSynthesizer->setFootControllerTarget(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 13: // Aftertouch Sensitivity
|
|
|
|
case 13: // Aftertouch Sensitivity
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Aftertouch Sensitivity %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Aftertouch Sensitivity %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setAftertouchRange(val, mTG); |
|
|
|
m_pSynthesizer->setAftertouchRange(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 14: // Aftertouch Assign
|
|
|
|
case 14: // Aftertouch Assign
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Aftertouch Assign %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Aftertouch Assign %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setAftertouchTarget(val, mTG); |
|
|
|
m_pSynthesizer->setAftertouchTarget(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 15: // Breath Controller Sensitivity
|
|
|
|
case 15: // Breath Controller Sensitivity
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Breath Controller Sensitivity %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Breath Controller Sensitivity %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setBreathControllerRange(val, mTG); |
|
|
|
m_pSynthesizer->setBreathControllerRange(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 16: // Breath Controller Assign
|
|
|
|
case 16: // Breath Controller Assign
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Breath Controller Assign %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Breath Controller Assign %d to %d", nTG, val & 0x0F); |
|
|
|
m_pSynthesizer->setBreathControllerTarget(val, mTG); |
|
|
|
m_pSynthesizer->setBreathControllerTarget(val, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 26: // Audio Output Level Attenuator (if supported)
|
|
|
|
case 26: // Audio Output Level Attenuator (if supported)
|
|
|
|
LOGNOTE("MIDI-SYSEX: TODO: Set Audio Output Level Attenuator %d to %d", mTG, val & 0x0F); |
|
|
|
LOGNOTE("MIDI-SYSEX: TODO: Set Audio Output Level Attenuator %d to %d", nTG, val & 0x0F); |
|
|
|
// m_pSynthesizer->setOutputAttenuator(val, mTG); // Uncomment if implemented
|
|
|
|
// m_pSynthesizer->setOutputAttenuator(val, nTG); // Uncomment if implemented
|
|
|
|
break; |
|
|
|
break; |
|
|
|
case 64: // Master Tuning
|
|
|
|
case 64: // Master Tuning
|
|
|
|
LOGNOTE("MIDI-SYSEX: Set Master Tuning"); |
|
|
|
LOGNOTE("MIDI-SYSEX: Set Master Tuning"); |
|
|
|
|
|
|
|
|
|
|
|
// Scale to -75 to +75 cents (TX816 range)
|
|
|
|
// Scale to -75 to +75 cents (TX816 range)
|
|
|
|
m_pSynthesizer->SetMasterTune(maplong(val, 1, 127, -75, 75), mTG); |
|
|
|
m_pSynthesizer->SetMasterTune(maplong(val, 1, 127, -75, 75), nTG); |
|
|
|
|
|
|
|
|
|
|
|
break; |
|
|
|
break; |
|
|
|
default: |
|
|
|
default: |
|
|
|
// Unknown or unsupported parameter
|
|
|
|
// Unknown or unsupported parameter
|
|
|
|
LOGNOTE("MIDI-SYSEX: Unknown parameter %d for TG %d", par, mTG); |
|
|
|
LOGNOTE("MIDI-SYSEX: Unknown parameter %d for TG %d", par, nTG); |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|