diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs
index f5c36a9cac..2547d7515e 100644
--- a/osu.Game/Overlays/MusicController.cs
+++ b/osu.Game/Overlays/MusicController.cs
@@ -98,20 +98,13 @@ namespace osu.Game.Overlays
///
/// Start playing the current track (if not already playing).
///
- public void Play()
- {
- if (!IsPlaying)
- TogglePause();
- }
-
- ///
- /// Toggle pause / play.
- ///
/// Whether the operation was successful.
- public bool TogglePause()
+ public bool Play(bool restart = false)
{
var track = current?.Track;
+ IsUserPaused = false;
+
if (track == null)
{
if (beatmap.Disabled)
@@ -121,16 +114,40 @@ namespace osu.Game.Overlays
return true;
}
+ if (restart)
+ track.Restart();
+ else if (!IsPlaying)
+ track.Start();
+
+ return true;
+ }
+
+ ///
+ /// Stop playing the current track and pause at the current position.
+ ///
+ public void Stop()
+ {
+ var track = current?.Track;
+
if (track.IsRunning)
{
IsUserPaused = true;
track.Stop();
}
+ }
+
+ ///
+ /// Toggle pause / play.
+ ///
+ /// Whether the operation was successful.
+ public bool TogglePause()
+ {
+ var track = current?.Track;
+
+ if (track?.IsRunning == true)
+ Stop();
else
- {
- track.Start();
- IsUserPaused = false;
- }
+ Play();
return true;
}
diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs
index 0025188ad4..8187dd04d1 100644
--- a/osu.Game/Screens/Select/SongSelect.cs
+++ b/osu.Game/Screens/Select/SongSelect.cs
@@ -597,12 +597,7 @@ namespace osu.Game.Screens.Select
track.RestartPoint = Beatmap.Value.Metadata.PreviewTime;
if (!track.IsRunning && (music?.IsUserPaused != true || isNewTrack))
- {
- if (fromPreviewPoint)
- track.Restart();
- else
- track.Start();
- }
+ music?.Play(fromPreviewPoint);
lastTrack.SetTarget(track);
}