foxygit / doom Log in
commit 93056dc73cc999d70d12b0175769742791fa2a1c
Author:     ceski <56656010+ceski-1@users.noreply.github.com>
AuthorDate: Mon May 15 12:05:05 2023 -0700
Commit:     ceski <56656010+ceski-1@users.noreply.github.com>
CommitDate: Tue May 16 09:24:57 2023 -0700

    Add SysEx check for MIDI instrument fallback
---
 src/i_winmusic.c   | 2 +-
 src/midifallback.c | 8 ++++++--
 src/midifallback.h | 3 ++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index 261d44f0..c60ba430 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -829,7 +829,7 @@ static boolean AddToBuffer(unsigned int delta_time, const midi_event_t *event,

     if (use_fallback)
     {
-        MIDI_CheckFallback(event, &fallback);
+        MIDI_CheckFallback(event, &fallback, true);
     }

     switch ((int) event->event_type)
diff --git a/src/midifallback.c b/src/midifallback.c
index dcfe9fd4..615d6880 100644
--- a/src/midifallback.c
+++ b/src/midifallback.c
@@ -145,7 +145,8 @@ static boolean GetProgramFallback(byte idx, byte program,
     return false;
 }

-void MIDI_CheckFallback(const midi_event_t *event, midi_fallback_t *fallback)
+void MIDI_CheckFallback(const midi_event_t *event, midi_fallback_t *fallback,
+                        boolean allow_sysex)
 {
     byte idx;
     byte program;
@@ -153,7 +154,10 @@ void MIDI_CheckFallback(const midi_event_t *event, midi_fallback_t *fallback)
     switch ((int)event->event_type)
     {
         case MIDI_EVENT_SYSEX:
-            UpdateDrumMap(event->data.sysex.data, event->data.sysex.length);
+            if (allow_sysex)
+            {
+                UpdateDrumMap(event->data.sysex.data, event->data.sysex.length);
+            }
             break;

         case MIDI_EVENT_CONTROLLER:
diff --git a/src/midifallback.h b/src/midifallback.h
index e66b8112..6093b2e6 100644
--- a/src/midifallback.h
+++ b/src/midifallback.h
@@ -37,7 +37,8 @@ typedef struct midi_fallback_t
     byte value;
 } midi_fallback_t;

-void MIDI_CheckFallback(const midi_event_t *event, midi_fallback_t *fallback);
+void MIDI_CheckFallback(const midi_event_t *event, midi_fallback_t *fallback,
+                        boolean allow_sysex);
 void MIDI_ResetFallback(void);
 void MIDI_InitFallback(void);