diff options
author | Wohlstand <admin@wohlnet.ru> | 2023-10-05 10:49:57 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2023-10-05 10:49:57 +0300 |
commit | 62add404aa71015dd7ae9713a0292743788f3d23 (patch) | |
tree | e3302f443fd4adbf926a0ffaeae03f64375bf795 /src/adlmidi_midiplay.cpp | |
parent | 3efa2e1f77feca5f2626828cf9b559ec570ce1ad (diff) | |
download | libADLMIDI-62add404aa71015dd7ae9713a0292743788f3d23.tar.gz libADLMIDI-62add404aa71015dd7ae9713a0292743788f3d23.tar.bz2 libADLMIDI-62add404aa71015dd7ae9713a0292743788f3d23.zip |
Improved CMF support
- Added missing transpose, depth control, and song marker controllers
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 8d17eeb..35655d9 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -791,23 +791,42 @@ void MIDIplay::realTime_Controller(uint8_t channel, uint8_t type, uint8_t value) break; // Phaser effect depth. We don't do. case 98: - m_midiChannels[channel].lastlrpn = value; - m_midiChannels[channel].nrpn = true; + if(synth.m_musicMode != Synth::MODE_CMF) + { + m_midiChannels[channel].lastlrpn = value; + m_midiChannels[channel].nrpn = true; + } break; case 99: - m_midiChannels[channel].lastmrpn = value; - m_midiChannels[channel].nrpn = true; + if(synth.m_musicMode == Synth::MODE_CMF) + { + // CMF (ctrl 0x63) Depth control + synth.m_deepVibratoMode = (value & 1) != 0; + synth.m_deepTremoloMode = (value & 2) != 0; + synth.commitDeepFlags(); + } + else + { + m_midiChannels[channel].lastmrpn = value; + m_midiChannels[channel].nrpn = true; + } break; case 100: - m_midiChannels[channel].lastlrpn = value; - m_midiChannels[channel].nrpn = false; + if(synth.m_musicMode != Synth::MODE_CMF) + { + m_midiChannels[channel].lastlrpn = value; + m_midiChannels[channel].nrpn = false; + } break; case 101: - m_midiChannels[channel].lastmrpn = value; - m_midiChannels[channel].nrpn = false; + if(synth.m_musicMode != Synth::MODE_CMF) + { + m_midiChannels[channel].lastmrpn = value; + m_midiChannels[channel].nrpn = false; + } break; case 113: @@ -821,10 +840,10 @@ void MIDIplay::realTime_Controller(uint8_t channel, uint8_t type, uint8_t value) setRPN(channel, value, false); break; - case 103: + case 103: // CMF (ctrl 0x67) rhythm mode if(synth.m_musicMode == Synth::MODE_CMF) m_cmfPercussionMode = (value != 0); - break; // CMF (ctrl 0x67) rhythm mode + break; default: break; |