aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_midiplay.cpp
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2023-10-05 10:49:57 +0300
committerWohlstand <admin@wohlnet.ru>2023-10-05 10:49:57 +0300
commit62add404aa71015dd7ae9713a0292743788f3d23 (patch)
treee3302f443fd4adbf926a0ffaeae03f64375bf795 /src/adlmidi_midiplay.cpp
parent3efa2e1f77feca5f2626828cf9b559ec570ce1ad (diff)
downloadlibADLMIDI-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.cpp39
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;