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);