From 13b57d62a5b4070d91abf000bd5456d0ee00de5a Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 17 Oct 2017 22:29:19 -0700 Subject: [PATCH] Fixed bug 2909 - Mix_PauseMusic and Mix_ResumeMusic not working on MIDI (.mid) Philipp Wiesemann This is a patch to make Mix_PauseMusic() and Mix_ResumeMusic() work with the Windows native MIDI decoder. --- music_nativemidi.c | 14 ++++++++++++-- native_midi/native_midi.h | 2 ++ native_midi/native_midi_haiku.cpp | 11 +++++++++++ native_midi/native_midi_mac.c | 8 ++++++++ native_midi/native_midi_macosx.c | 8 ++++++++ native_midi/native_midi_win32.c | 14 ++++++++++++++ 6 files changed, 55 insertions(+), 2 deletions(-) diff --git a/music_nativemidi.c b/music_nativemidi.c index 48d05655..72c3c19c 100644 --- a/music_nativemidi.c +++ b/music_nativemidi.c @@ -53,6 +53,16 @@ static SDL_bool NATIVEMIDI_IsPlaying(void *context) return native_midi_active() ? SDL_TRUE : SDL_FALSE; } +static void NATIVEMIDI_Pause(void *context) +{ + native_midi_pause(); +} + +static void NATIVEMIDI_Resume(void *context) +{ + native_midi_resume(); +} + static void NATIVEMIDI_Stop(void *context) { native_midi_stop(); @@ -81,8 +91,8 @@ Mix_MusicInterface Mix_MusicInterface_NATIVEMIDI = NATIVEMIDI_IsPlaying, NULL, /* GetAudio */ NULL, /* Seek */ - NULL, /* Pause */ - NULL, /* Resume */ + NATIVEMIDI_Pause, + NATIVEMIDI_Resume, NATIVEMIDI_Stop, NATIVEMIDI_Delete, NULL, /* Close */ diff --git a/native_midi/native_midi.h b/native_midi/native_midi.h index 3517829a..92d25359 100644 --- a/native_midi/native_midi.h +++ b/native_midi/native_midi.h @@ -30,6 +30,8 @@ int native_midi_detect(void); NativeMidiSong *native_midi_loadsong_RW(SDL_RWops *src, int freesrc); void native_midi_freesong(NativeMidiSong *song); void native_midi_start(NativeMidiSong *song, int loops); +void native_midi_pause(void); +void native_midi_resume(void); void native_midi_stop(void); int native_midi_active(void); void native_midi_setvolume(int volume); diff --git a/native_midi/native_midi_haiku.cpp b/native_midi/native_midi_haiku.cpp index 65de5f5e..81b847e9 100644 --- a/native_midi/native_midi_haiku.cpp +++ b/native_midi/native_midi_haiku.cpp @@ -253,6 +253,7 @@ void native_midi_freesong(NativeMidiSong *song) delete song->store; delete song; song = 0; } + void native_midi_start(NativeMidiSong *song, int loops) { native_midi_stop(); @@ -261,6 +262,15 @@ void native_midi_start(NativeMidiSong *song, int loops) song->store->Start(); currentSong = song; } + +void native_midi_pause(void) +{ +} + +void native_midi_resume(void) +{ +} + void native_midi_stop(void) { if (currentSong == NULL) return; @@ -270,6 +280,7 @@ void native_midi_stop(void) usleep(1000); currentSong = NULL; } + int native_midi_active(void) { if (currentSong == NULL) return 0; diff --git a/native_midi/native_midi_mac.c b/native_midi/native_midi_mac.c index a9ef6443..24a39423 100644 --- a/native_midi/native_midi_mac.c +++ b/native_midi/native_midi_mac.c @@ -242,6 +242,14 @@ void native_midi_start(NativeMidiSong *song, int loops) SDL_PauseAudio(0); } +void native_midi_pause(void) +{ +} + +void native_midi_resume(void) +{ +} + void native_midi_stop(void) { if (gTunePlayer == NULL) diff --git a/native_midi/native_midi_macosx.c b/native_midi/native_midi_macosx.c index 5d432d28..6ee31e0e 100644 --- a/native_midi/native_midi_macosx.c +++ b/native_midi/native_midi_macosx.c @@ -287,6 +287,14 @@ void native_midi_start(NativeMidiSong *song, int loops) SDL_PauseAudio(0); } +void native_midi_pause(void) +{ +} + +void native_midi_resume(void) +{ +} + void native_midi_stop(void) { if (currentsong) { diff --git a/native_midi/native_midi_win32.c b/native_midi/native_midi_win32.c index 047711d4..44bb055d 100644 --- a/native_midi/native_midi_win32.c +++ b/native_midi/native_midi_win32.c @@ -272,6 +272,20 @@ void native_midi_start(NativeMidiSong *song, int loops) } } +void native_midi_pause(void) +{ + if (!hMidiStream) + return; + midiStreamPause(hMidiStream); +} + +void native_midi_resume(void) +{ + if (!hMidiStream) + return; + midiStreamRestart(hMidiStream); +} + void native_midi_stop(void) { if (!hMidiStream)