diff --git a/src/menus/transient/sound-test.c b/src/menus/transient/sound-test.c index 78322d791..2ea8880a4 100644 --- a/src/menus/transient/sound-test.c +++ b/src/menus/transient/sound-test.c @@ -36,7 +36,14 @@ static void M_SoundTestMainControl(INT32 choice) } else if (soundtest.playing == true) { - S_SoundTestStop((currentMenu->menuitems[itemOn].mvar1 == 2)); + if (currentMenu->menuitems[itemOn].mvar1 == 2) + { + S_SoundTestTogglePause(); + } + else + { + S_SoundTestStop(); + } } } diff --git a/src/s_sound.c b/src/s_sound.c index b83fa1110..918a21c08 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1593,7 +1593,7 @@ void S_SoundTestPlay(void) { if (soundtest.current == NULL) { - S_SoundTestStop(false); + S_SoundTestStop(); return; } @@ -1603,13 +1603,18 @@ void S_SoundTestPlay(void) soundtest.playing = true; + if (soundtest.paused == true) + { + S_SoundTestTogglePause(); + } + S_ChangeMusicInternal(soundtest.current->name[soundtest.currenttrack], true); S_ShowMusicCredit(); soundtest.privilegedrequest = false; } -void S_SoundTestStop(boolean pause) +void S_SoundTestStop(void) { if (soundtest.playing == false) { @@ -1621,18 +1626,35 @@ void S_SoundTestStop(boolean pause) S_StopMusic(); cursongcredit.def = NULL; - if (pause == false) - { - soundtest.playing = false; - soundtest.current = NULL; - soundtest.currenttrack = 0; + soundtest.playing = false; + soundtest.paused = false; + soundtest.current = NULL; + soundtest.currenttrack = 0; - S_AttemptToRestoreMusic(); - } + S_AttemptToRestoreMusic(); soundtest.privilegedrequest = false; } +void S_SoundTestTogglePause(void) +{ + if (soundtest.playing == false) + { + return; + } + + if (soundtest.paused == true) + { + soundtest.paused = false; + S_ResumeAudio(); + } + else + { + soundtest.paused = true; + S_PauseAudio(); + } +} + boolean S_PlaysimMusicDisabled(void) { if (soundtest.privilegedrequest) @@ -2653,6 +2675,9 @@ void S_ResumeAudio(void) if (S_MusicNotInFocus()) return; + if (soundtest.paused == true) + return; + if (I_SongPlaying() && I_SongPaused()) I_ResumeSong(); diff --git a/src/s_sound.h b/src/s_sound.h index 06286a1b0..d39735f97 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -211,6 +211,7 @@ extern struct cursongcredit extern struct soundtest { boolean playing; // Music is playing? + boolean paused; // System paused? boolean privilegedrequest; // Overrides S_PlaysimMusicDisabled w/o changing every function signature musicdef_t *current; // Current selected music definition SINT8 currenttrack; // Current selected music track for definition @@ -220,7 +221,8 @@ extern struct soundtest void S_PopulateSoundTestSequence(void); void S_UpdateSoundTestDef(boolean reverse, boolean dotracks, boolean skipnull); void S_SoundTestPlay(void); -void S_SoundTestStop(boolean pause); +void S_SoundTestStop(void); +void S_SoundTestTogglePause(void); boolean S_PlaysimMusicDisabled(void);