diff --git a/osu.Game/Screens/Play/MasterGameplayClockContainer.cs b/osu.Game/Screens/Play/MasterGameplayClockContainer.cs
index f1ee65dcd3..7c30f86125 100644
--- a/osu.Game/Screens/Play/MasterGameplayClockContainer.cs
+++ b/osu.Game/Screens/Play/MasterGameplayClockContainer.cs
@@ -8,6 +8,7 @@ using osu.Framework.Audio;
using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
+using osu.Framework.Graphics.Containers;
using osu.Framework.Timing;
using osu.Game.Beatmaps;
using osu.Game.Beatmaps.ControlPoints;
@@ -56,6 +57,11 @@ namespace osu.Game.Screens.Play
///
private double? actualStopTime;
+ ///
+ /// Maintained solely to delegate pieces to (to maintain parent lookups).
+ ///
+ private readonly AudioContainer audioContainer;
+
///
/// Create a new master gameplay clock container.
///
@@ -69,6 +75,8 @@ namespace osu.Game.Screens.Play
this.skipTargetTime = skipTargetTime;
StartTime = findEarliestStartTime();
+
+ AddInternal(audioContainer = new AudioContainer());
}
private double findEarliestStartTime()
@@ -238,25 +246,32 @@ namespace osu.Game.Screens.Play
track.RemoveAdjustment(type, adjustBindable);
}
+ void IAdjustableAudioComponent.RemoveAllAdjustments(AdjustableProperty type) => audioContainer.RemoveAllAdjustments(type);
+
+ void IAdjustableAudioComponent.BindAdjustments(IAggregateAudioAdjustment component) => audioContainer.BindAdjustments(component);
+
+ void IAdjustableAudioComponent.UnbindAdjustments(IAggregateAudioAdjustment component) => audioContainer.UnbindAdjustments(component);
+
+ BindableNumber IAdjustableAudioComponent.Volume => audioContainer.Volume;
+
+ BindableNumber IAdjustableAudioComponent.Balance => audioContainer.Balance;
+
+ BindableNumber IAdjustableAudioComponent.Frequency => audioContainer.Frequency;
+
+ BindableNumber IAdjustableAudioComponent.Tempo => audioContainer.Tempo;
+
public override void ResetSpeedAdjustments()
{
track.RemoveAllAdjustments(AdjustableProperty.Frequency);
track.RemoveAllAdjustments(AdjustableProperty.Tempo);
}
- public void RemoveAllAdjustments(AdjustableProperty type) => throw new NotImplementedException();
+ IBindable IAggregateAudioAdjustment.AggregateVolume => audioContainer.AggregateVolume;
- public void BindAdjustments(IAggregateAudioAdjustment component) => throw new NotImplementedException();
- public void UnbindAdjustments(IAggregateAudioAdjustment component) => throw new NotImplementedException();
+ IBindable IAggregateAudioAdjustment.AggregateBalance => audioContainer.AggregateBalance;
- public BindableNumber Volume => throw new NotImplementedException();
- public BindableNumber Balance => throw new NotImplementedException();
- public BindableNumber Frequency => throw new NotImplementedException();
- public BindableNumber Tempo => throw new NotImplementedException();
+ IBindable IAggregateAudioAdjustment.AggregateFrequency => audioContainer.AggregateFrequency;
- public IBindable AggregateVolume => throw new NotImplementedException();
- public IBindable AggregateBalance => throw new NotImplementedException();
- public IBindable AggregateFrequency => throw new NotImplementedException();
- public IBindable AggregateTempo => throw new NotImplementedException();
+ IBindable IAggregateAudioAdjustment.AggregateTempo => audioContainer.AggregateTempo;
}
}