foxygit / doom Log in
commit bcfb28aa35a93d2bdaf289fbf3f64f1d6f632964
Author:     Roman Fomin <rfomin@gmail.com>
AuthorDate: Thu Nov 11 17:28:24 2021 +0700
Commit:     Roman Fomin <rfomin@gmail.com>
CommitDate: Thu Nov 11 17:28:24 2021 +0700

    Fix Windows native MIDI playback for Heretic/Hexen
---
 src/i_sdlmusic.c | 11 +++++++++--
 src/i_winmusic.c | 10 ++++++----
 src/i_winmusic.h |  2 +-
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/i_sdlmusic.c b/src/i_sdlmusic.c
index 37b7a63e..18f6fdc4 100644
--- a/src/i_sdlmusic.c
+++ b/src/i_sdlmusic.c
@@ -454,8 +454,15 @@ static void *I_SDL_RegisterSong(void *data, int len)
     // music with the Windows native MIDI.
     if (win_midi_stream_opened)
     {
-        music = NULL;
-        I_WIN_RegisterSong(filename);
+        if (I_WIN_RegisterSong(filename))
+        {
+            music = (void *) 1;
+        }
+        else
+        {
+            music = NULL;
+            fprintf(stderr, "Error loading midi: Failed to register song.\n");
+        }
     }
     else
 #endif
diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index 7d5b1b5b..7d206ffd 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -411,7 +411,7 @@ void I_WIN_PlaySong(boolean looping)
     }
 }

-void I_WIN_RegisterSong(char *filename)
+boolean I_WIN_RegisterSong(char *filename)
 {
     int i;
     midi_file_t *file;
@@ -424,7 +424,7 @@ void I_WIN_RegisterSong(char *filename)
     if (file == NULL)
     {
         fprintf(stderr, "I_WIN_RegisterSong: Failed to load MID.\n");
-        return;
+        return false;
     }

     // Initialize channels volume.
@@ -440,7 +440,7 @@ void I_WIN_RegisterSong(char *filename)
     if (mmr != MMSYSERR_NOERROR)
     {
         MidiErrorMessageBox(mmr);
-        return;
+        return false;
     }

     // Set initial tempo.
@@ -451,7 +451,7 @@ void I_WIN_RegisterSong(char *filename)
     if (mmr != MMSYSERR_NOERROR)
     {
         MidiErrorMessageBox(mmr);
-        return;
+        return false;
     }

     MIDItoStream(file);
@@ -463,6 +463,8 @@ void I_WIN_RegisterSong(char *filename)

     FillBuffer();
     StreamOut();
+
+    return true;
 }

 void I_WIN_UnRegisterSong(void)
diff --git a/src/i_winmusic.h b/src/i_winmusic.h
index 45c381ca..8f1edf10 100644
--- a/src/i_winmusic.h
+++ b/src/i_winmusic.h
@@ -25,7 +25,7 @@ boolean I_WIN_InitMusic(void);
 void I_WIN_PlaySong(boolean looping);
 void I_WIN_StopSong(void);
 void I_WIN_SetMusicVolume(int volume);
-void I_WIN_RegisterSong(char* filename);
+boolean I_WIN_RegisterSong(char* filename);
 void I_WIN_UnRegisterSong(void);
 void I_WIN_ShutdownMusic(void);