1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-16 20:22:55 +08:00

Merge pull request #29502 from peppy/no-duck-when-zero-sample-volume

Don't duck music when effect volume is set to zero
This commit is contained in:
Dan Balasescu 2024-08-19 16:13:57 +09:00 committed by GitHub
commit 4351de7abf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -60,6 +60,8 @@ namespace osu.Game.Overlays
[Resolved]
private RealmAccess realm { get; set; } = null!;
private BindableNumber<double> sampleVolume = null!;
private readonly BindableDouble audioDuckVolume = new BindableDouble(1);
private AudioFilter audioDuckFilter = null!;
@ -69,6 +71,7 @@ namespace osu.Game.Overlays
{
AddInternal(audioDuckFilter = new AudioFilter(audio.TrackMixer));
audio.Tracks.AddAdjustment(AdjustableProperty.Volume, audioDuckVolume);
sampleVolume = audio.VolumeSample.GetBoundCopy();
}
protected override void LoadComplete()
@ -269,6 +272,10 @@ namespace osu.Game.Overlays
/// <returns>A <see cref="IDisposable"/> which will restore the duck operation when disposed.</returns>
public IDisposable Duck(DuckParameters? parameters = null)
{
// Don't duck if samples have no volume, it sounds weird.
if (sampleVolume.Value == 0)
return new InvokeOnDisposal(() => { });
parameters ??= new DuckParameters();
duckOperations.Add(parameters);
@ -302,6 +309,10 @@ namespace osu.Game.Overlays
/// <param name="parameters">Parameters defining the ducking operation.</param>
public void DuckMomentarily(double delayUntilRestore, DuckParameters? parameters = null)
{
// Don't duck if samples have no volume, it sounds weird.
if (sampleVolume.Value == 0)
return;
parameters ??= new DuckParameters();
IDisposable duckOperation = Duck(parameters);