commit 4bfbd986b2831945250930c2c7e80896254cab16
Author: ceski <56656010+ceski-1@users.noreply.github.com>
AuthorDate: Wed Mar 29 23:41:42 2023 -0700
Commit: GitHub <noreply@github.com>
CommitDate: Thu Mar 30 08:41:42 2023 +0200
win midi: Update volume after "reset all controllers" event (#1590)
---
src/i_winmusic.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index 1fe5734f..7fe780d4 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -908,6 +908,20 @@ static boolean AddToBuffer(unsigned int delta_time, midi_event_t *event,
SendNOPMsg(delta_time);
break;
+ case MIDI_CONTROLLER_RESET_ALL_CTRLS:
+ SendShortMsg(delta_time, MIDI_EVENT_CONTROLLER,
+ event->data.channel.channel,
+ MIDI_CONTROLLER_RESET_ALL_CTRLS, 0);
+
+ // MS GS Wavetable Synth resets the channel volume after a
+ // "reset all controllers" event, so reapply the volume
+ if (MidiDevice == ms_gs_synth)
+ {
+ i = event->data.channel.channel;
+ SendVolumeMsg(0, i, channel_volume[i]);
+ }
+ break;
+
default:
SendShortMsg(delta_time, MIDI_EVENT_CONTROLLER,
event->data.channel.channel,
@@ -1085,6 +1099,17 @@ static void FillBuffer(void)
{
SendShortMsg(0, MIDI_EVENT_CONTROLLER, i, MIDI_CONTROLLER_RESET_ALL_CTRLS, 0);
}
+
+ // MS GS Wavetable Synth resets the channel volume after a
+ // "reset all controllers" event, so reapply the volume
+ if (MidiDevice == ms_gs_synth)
+ {
+ for (i = 0; i < MIDI_CHANNELS_PER_TRACK; ++i)
+ {
+ SendVolumeMsg(0, i, channel_volume[i]);
+ }
+ }
+
RestartTracks();
continue;
}