diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs
index f5c36a9cac..9b54a6c9a6 100644
--- a/osu.Game/Overlays/MusicController.cs
+++ b/osu.Game/Overlays/MusicController.cs
@@ -136,11 +136,20 @@ namespace osu.Game.Overlays
}
///
- /// Play the previous track.
+ /// Play the previous track or restart the current track if it's current time below 5000ms
///
/// Whether the operation was successful.
public bool PrevTrack()
{
+ var currentTrackPosition = current?.Track.CurrentTime;
+
+ if (currentTrackPosition >= 5000)
+ {
+ SeekTo(0);
+
+ return true;
+ }
+
queuedDirection = TrackChangeDirection.Prev;
var playable = BeatmapSets.TakeWhile(i => i.ID != current.BeatmapSetInfo.ID).LastOrDefault() ?? BeatmapSets.LastOrDefault();
@@ -260,8 +269,9 @@ namespace osu.Game.Overlays
return true;
case GlobalAction.MusicPrev:
+ var shouldRestart = current?.Track.CurrentTime >= 5000;
if (PrevTrack())
- onScreenDisplay?.Display(new MusicControllerToast("Previous track"));
+ onScreenDisplay?.Display(new MusicControllerToast(shouldRestart ? "Restart track" : "Previous track"));
return true;
}