shithub: choc

Download patch

ref: 796abf07141ade4d1c035d33bb478356a087279d
parent: 5082a2f1b43736e24e9927c16268788506b3b25b
author: Roman Fomin <rfomin@gmail.com>
date: Fri Jan 14 09:17:17 EST 2022

win midi: Proper pause/resume

--- a/src/i_sdlmusic.c
+++ b/src/i_sdlmusic.c
@@ -341,9 +341,13 @@
         return;
     }
 
+#if defined(_WIN32)
+    I_WIN_PauseSong();
+#else
     musicpaused = true;
 
     UpdateMusicVolume();
+#endif
 }
 
 static void I_SDL_ResumeSong(void)
@@ -353,9 +357,13 @@
         return;
     }
 
+#if defined(_WIN32)
+    I_WIN_ResumeSong();
+#else
     musicpaused = false;
 
     UpdateMusicVolume();
+#endif
 }
 
 static void I_SDL_StopSong(void)
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -444,6 +444,28 @@
     UpdateVolume();
 }
 
+void I_WIN_PauseSong(void)
+{
+    MMRESULT mmr;
+
+    mmr = midiStreamPause(hMidiStream);
+    if (mmr != MMSYSERR_NOERROR)
+    {
+        MidiErrorMessageBox(mmr);
+    }
+}
+
+void I_WIN_ResumeSong(void)
+{
+    MMRESULT mmr;
+
+    mmr = midiStreamRestart(hMidiStream);
+    if (mmr != MMSYSERR_NOERROR)
+    {
+        MidiErrorMessageBox(mmr);
+    }
+}
+
 boolean I_WIN_RegisterSong(char *filename)
 {
     int i;
@@ -517,6 +539,7 @@
     MMRESULT mmr;
 
     I_WIN_StopSong();
+    I_WIN_UnRegisterSong();
 
     mmr = midiOutUnprepareHeader((HMIDIOUT)hMidiStream, hdr, sizeof(MIDIHDR));
     if (mmr != MMSYSERR_NOERROR)
--- a/src/i_winmusic.h
+++ b/src/i_winmusic.h
@@ -23,6 +23,8 @@
 
 boolean I_WIN_InitMusic(void);
 void I_WIN_PlaySong(boolean looping);
+void I_WIN_PauseSong(void);
+void I_WIN_ResumeSong(void);
 void I_WIN_StopSong(void);
 void I_WIN_SetMusicVolume(int volume);
 boolean I_WIN_RegisterSong(char* filename);