Browse Source

Resume music after restarting SoundEngine

kiwec 2 months ago
parent
commit
58d5748de9
3 changed files with 13 additions and 9 deletions
  1. 7 0
      src/App/Osu/Osu.cpp
  2. 1 0
      src/App/Osu/Osu.h
  3. 5 9
      src/Engine/SoundEngine.cpp

+ 7 - 0
src/App/Osu/Osu.cpp

@@ -721,6 +721,13 @@ void Osu::update() {
         m_screens[i]->mouse_update(&propagate_clicks);
     }
 
+    if(music_unpause_scheduled && engine->getSound()->isReady()) {
+        if(getSelectedBeatmap()->getMusic() != NULL) {
+            engine->getSound()->play(getSelectedBeatmap()->getMusic());
+        }
+        music_unpause_scheduled = false;
+    }
+
     // main beatmap update
     m_bSeeking = false;
     if(isInPlayMode()) {

+ 1 - 0
src/App/Osu/Osu.h

@@ -347,6 +347,7 @@ class Osu : public App, public MouseListener {
     u32 watched_user_id = 0;
 
     // custom
+    bool music_unpause_scheduled = false;
     bool m_bScheduleEndlessModNextBeatmap;
     int m_iMultiplayerClientNumEscPresses;
     bool m_bWasBossKeyPaused;

+ 5 - 9
src/Engine/SoundEngine.cpp

@@ -784,11 +784,6 @@ void SoundEngine::setOutputDevice(OUTPUT_DEVICE device) {
     if(osu->getSelectedBeatmap()->getMusic() != NULL) {
         was_playing = osu->getSelectedBeatmap()->getMusic()->isPlaying();
         prevMusicPositionMS = osu->getSelectedBeatmap()->getMusic()->getPositionMS();
-
-        if(osu->isInPlayMode() && was_playing) {
-            osu->getSelectedBeatmap()->pause(false);
-            osu->m_pauseMenu->setVisible(osu->getSelectedBeatmap()->isPaused());
-        }
     }
 
     // TODO: This is blocking main thread, can freeze for a long time on some sound cards
@@ -816,16 +811,17 @@ void SoundEngine::setOutputDevice(OUTPUT_DEVICE device) {
             osu->getSelectedBeatmap()->unloadMusic();
             osu->getSelectedBeatmap()->loadMusic(false, osu->getSelectedBeatmap()->m_bForceStreamPlayback);
             osu->getSelectedBeatmap()->getMusic()->setLoop(false);
-            if(was_playing) {
-                play(osu->getSelectedBeatmap()->getMusic());
-            }
             osu->getSelectedBeatmap()->getMusic()->setPositionMS(prevMusicPositionMS);
         } else {
             osu->getSelectedBeatmap()->unloadMusic();
-            osu->getSelectedBeatmap()->select();  // (triggers preview music play)
+            osu->getSelectedBeatmap()->select();
             osu->getSelectedBeatmap()->getMusic()->setPositionMS(prevMusicPositionMS);
         }
     }
+
+    if(was_playing) {
+        osu->music_unpause_scheduled = true;
+    }
 }
 
 void SoundEngine::setVolume(float volume) {