diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs
index f6208c46cb..6ad147735b 100644
--- a/osu.Game/Overlays/MusicController.cs
+++ b/osu.Game/Overlays/MusicController.cs
@@ -92,6 +92,15 @@ namespace osu.Game.Overlays
});
}
+ ///
+ /// Start playing the current track (if not already playing).
+ ///
+ public void Play()
+ {
+ if (!IsPlaying)
+ TogglePause();
+ }
+
///
/// Toggle pause / play.
///
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index 8340814db9..edb0e6deb8 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -359,6 +359,7 @@ namespace osu.Game.Screens.Select
return;
beatmapNoDebounce = beatmap;
+
performUpdateSelected();
}
@@ -586,10 +587,18 @@ namespace osu.Game.Screens.Select
{
Track track = Beatmap.Value.Track;
- if ((!track.IsRunning || restart) && music?.IsUserPaused != true)
+ if (!track.IsRunning || restart)
{
track.RestartPoint = Beatmap.Value.Metadata.PreviewTime;
- track.Restart();
+
+ if (music != null)
+ {
+ // use the global music controller (when available) to cancel a potential local user paused state.
+ music.SeekTo(track.RestartPoint);
+ music.Play();
+ }
+ else
+ track.Restart();
}
}