From b83c8443ea2e5fc52213045d5701a55d0ee30b73 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 6 Feb 2023 18:22:51 +0900 Subject: [PATCH] Ensure pause sample loop is stopped on exiting player --- osu.Game/Screens/Play/PauseOverlay.cs | 8 ++++++++ osu.Game/Screens/Play/Player.cs | 3 +++ 2 files changed, 11 insertions(+) diff --git a/osu.Game/Screens/Play/PauseOverlay.cs b/osu.Game/Screens/Play/PauseOverlay.cs index d9c60519ad..db42998c45 100644 --- a/osu.Game/Screens/Play/PauseOverlay.cs +++ b/osu.Game/Screens/Play/PauseOverlay.cs @@ -44,6 +44,14 @@ namespace osu.Game.Screens.Play }); } + public void StopAllSamples() + { + if (!IsLoaded) + return; + + pauseLoop.Stop(); + } + protected override void PopIn() { base.PopIn(); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index bf7f38cdd3..37b3f906eb 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -1073,7 +1073,10 @@ namespace osu.Game.Screens.Play public override bool OnExiting(ScreenExitEvent e) { screenSuspension?.RemoveAndDisposeImmediately(); + + // Eagerly clean these up as disposal of child components is asynchronous and may leave sounds playing beyond user expectations. failAnimationLayer?.Stop(); + PauseOverlay.StopAllSamples(); if (LoadedBeatmapSuccessfully) {