From 3650f3c47978244befd871e7ae705ae033d50288 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 8 Jul 2024 13:52:40 +0900 Subject: [PATCH] Allow multiple ducks with same parameters --- .../Visual/Menus/TestSceneAudioDucking.cs | 39 +++++++++++++++++++ osu.Game/Overlays/MusicController.cs | 3 -- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tests/Visual/Menus/TestSceneAudioDucking.cs b/osu.Game.Tests/Visual/Menus/TestSceneAudioDucking.cs index a7ec7f5bdc..8d20d8e0d5 100644 --- a/osu.Game.Tests/Visual/Menus/TestSceneAudioDucking.cs +++ b/osu.Game.Tests/Visual/Menus/TestSceneAudioDucking.cs @@ -56,6 +56,45 @@ namespace osu.Game.Tests.Visual.Menus AddUntilStep("wait for restore to complete", () => Game.Audio.Tracks.AggregateVolume.Value, () => Is.EqualTo(normalVolume).Within(0.01)); } + [Test] + public void TestMultipleDucksSameParameters() + { + var duckParameters = new DuckParameters + { + DuckVolumeTo = 0.5, + }; + + IDisposable duckOp1 = null!; + IDisposable duckOp2 = null!; + + double normalVolume = 1; + + AddStep("get initial volume", () => + { + normalVolume = Game.Audio.Tracks.AggregateVolume.Value; + }); + + AddStep("duck one", () => + { + duckOp1 = Game.MusicController.Duck(duckParameters); + }); + + AddUntilStep("wait for duck to complete", () => Game.Audio.Tracks.AggregateVolume.Value, () => Is.EqualTo(normalVolume * 0.5f).Within(0.01)); + + AddStep("duck two", () => + { + duckOp2 = Game.MusicController.Duck(duckParameters); + }); + + AddUntilStep("wait for duck to complete", () => Game.Audio.Tracks.AggregateVolume.Value, () => Is.EqualTo(normalVolume * 0.5f).Within(0.01)); + + AddStep("restore two", () => duckOp2.Dispose()); + AddUntilStep("wait for restore to complete", () => Game.Audio.Tracks.AggregateVolume.Value, () => Is.EqualTo(normalVolume * 0.5f).Within(0.01)); + + AddStep("restore one", () => duckOp1.Dispose()); + AddUntilStep("wait for restore to complete", () => Game.Audio.Tracks.AggregateVolume.Value, () => Is.EqualTo(normalVolume).Within(0.01)); + } + [Test] public void TestMultipleDucksReverseOrder() { diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index a01f3bfa5f..116e60a014 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -268,9 +268,6 @@ namespace osu.Game.Overlays { parameters ??= new DuckParameters(); - if (duckOperations.Contains(parameters)) - throw new ArgumentException("Ducking has already been applied for the provided parameters.", nameof(parameters)); - duckOperations.Add(parameters); DuckParameters volumeOperation = duckOperations.MinBy(p => p.DuckVolumeTo)!;