diff --git a/osu.Game.Tests/Rulesets/Mods/ModTimeRampTest.cs b/osu.Game.Tests/Rulesets/Mods/ModTimeRampTest.cs
index 4b9f2181dc..51163efd6a 100644
--- a/osu.Game.Tests/Rulesets/Mods/ModTimeRampTest.cs
+++ b/osu.Game.Tests/Rulesets/Mods/ModTimeRampTest.cs
@@ -3,9 +3,11 @@
using NUnit.Framework;
using osu.Framework.Audio.Track;
+using osu.Framework.Timing;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu.Objects;
+using osu.Game.Rulesets.Osu.UI;
namespace osu.Game.Tests.Rulesets.Mods
{
@@ -16,11 +18,14 @@ namespace osu.Game.Tests.Rulesets.Mods
private const double duration = 9000;
private TrackVirtual track;
+ private OsuPlayfield playfield;
[SetUp]
public void SetUp()
{
track = new TrackVirtual(20_000);
+ // define a fake playfield to re-calculate the current rate by ModTimeRamp.Update(Playfield).
+ playfield = new OsuPlayfield { Clock = new FramedClock(track) };
}
[TestCase(0, 1)]
@@ -80,8 +85,8 @@ namespace osu.Game.Tests.Rulesets.Mods
private void seekTrackAndUpdateMod(ModTimeRamp mod, double time)
{
track.Seek(time);
- // update the mod via a fake playfield to re-calculate the current rate.
- mod.Update(null);
+ playfield.Clock.ProcessFrame();
+ mod.Update(playfield);
}
private static Beatmap createSingleSpinnerBeatmap()
diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs
index 5fc0da8891..65b06eb864 100644
--- a/osu.Game/Overlays/MusicController.cs
+++ b/osu.Game/Overlays/MusicController.cs
@@ -377,6 +377,8 @@ namespace osu.Game.Overlays
}
}
+ private AudioAdjustments modTrackAdjustments;
+
///
/// Resets the adjustments currently applied on and applies the mod adjustments if is true.
///
@@ -385,6 +387,7 @@ namespace osu.Game.Overlays
///
public void ResetTrackAdjustments()
{
+ // todo: we probably want a helper method rather than this.
CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Balance);
CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Frequency);
CurrentTrack.RemoveAllAdjustments(AdjustableProperty.Tempo);
@@ -392,8 +395,10 @@ namespace osu.Game.Overlays
if (allowTrackAdjustments)
{
+ CurrentTrack.BindAdjustments(modTrackAdjustments = new AudioAdjustments());
+
foreach (var mod in mods.Value.OfType())
- mod.ApplyToTrack(CurrentTrack);
+ mod.ApplyToTrack(modTrackAdjustments);
}
}
}
diff --git a/osu.Game/Rulesets/Mods/IApplicableToSample.cs b/osu.Game/Rulesets/Mods/IApplicableToSample.cs
index 50a6d501b6..efd88f2399 100644
--- a/osu.Game/Rulesets/Mods/IApplicableToSample.cs
+++ b/osu.Game/Rulesets/Mods/IApplicableToSample.cs
@@ -1,7 +1,7 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using osu.Framework.Graphics.Audio;
+using osu.Framework.Audio;
namespace osu.Game.Rulesets.Mods
{
@@ -10,6 +10,6 @@ namespace osu.Game.Rulesets.Mods
///
public interface IApplicableToSample : IApplicableMod
{
- void ApplyToSample(DrawableSample sample);
+ void ApplyToSample(IAdjustableAudioComponent sample);
}
}
diff --git a/osu.Game/Rulesets/Mods/IApplicableToTrack.cs b/osu.Game/Rulesets/Mods/IApplicableToTrack.cs
index 9b840cea08..deecd4bf1f 100644
--- a/osu.Game/Rulesets/Mods/IApplicableToTrack.cs
+++ b/osu.Game/Rulesets/Mods/IApplicableToTrack.cs
@@ -1,7 +1,7 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
-using osu.Framework.Audio.Track;
+using osu.Framework.Audio;
namespace osu.Game.Rulesets.Mods
{
@@ -10,6 +10,6 @@ namespace osu.Game.Rulesets.Mods
///
public interface IApplicableToTrack : IApplicableMod
{
- void ApplyToTrack(ITrack track);
+ void ApplyToTrack(IAdjustableAudioComponent track);
}
}
diff --git a/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs b/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs
index 93251f7b2d..fb291fe10f 100644
--- a/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs
+++ b/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs
@@ -5,9 +5,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
-using osu.Framework.Graphics.Audio;
using osu.Framework.Utils;
using osu.Game.Beatmaps;
using osu.Game.Configuration;
@@ -79,7 +77,7 @@ namespace osu.Game.Rulesets.Mods
// Apply a fixed rate change when missing, allowing the player to catch up when the rate is too fast.
private const double rate_change_on_miss = 0.95d;
- private ITrack track;
+ private IAdjustableAudioComponent track;
private double targetRate = 1d;
///
@@ -141,7 +139,7 @@ namespace osu.Game.Rulesets.Mods
AdjustPitch.BindValueChanged(adjustPitchChanged);
}
- public void ApplyToTrack(ITrack track)
+ public void ApplyToTrack(IAdjustableAudioComponent track)
{
this.track = track;
@@ -151,7 +149,7 @@ namespace osu.Game.Rulesets.Mods
recentRates.AddRange(Enumerable.Repeat(InitialRate.Value, recent_rate_count));
}
- public void ApplyToSample(DrawableSample sample)
+ public void ApplyToSample(IAdjustableAudioComponent sample)
{
sample.AddAdjustment(AdjustableProperty.Frequency, SpeedChange);
}
@@ -210,7 +208,6 @@ namespace osu.Game.Rulesets.Mods
private void adjustPitchChanged(ValueChangedEvent adjustPitchSetting)
{
track?.RemoveAdjustment(adjustmentForPitchSetting(adjustPitchSetting.OldValue), SpeedChange);
-
track?.AddAdjustment(adjustmentForPitchSetting(adjustPitchSetting.NewValue), SpeedChange);
}
diff --git a/osu.Game/Rulesets/Mods/ModDaycore.cs b/osu.Game/Rulesets/Mods/ModDaycore.cs
index 61ad7db706..9e8e44229e 100644
--- a/osu.Game/Rulesets/Mods/ModDaycore.cs
+++ b/osu.Game/Rulesets/Mods/ModDaycore.cs
@@ -2,7 +2,6 @@
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics.Sprites;
@@ -27,7 +26,7 @@ namespace osu.Game.Rulesets.Mods
}, true);
}
- public override void ApplyToTrack(ITrack track)
+ public override void ApplyToTrack(IAdjustableAudioComponent track)
{
// base.ApplyToTrack() intentionally not called (different tempo adjustment is applied)
track.AddAdjustment(AdjustableProperty.Frequency, freqAdjust);
diff --git a/osu.Game/Rulesets/Mods/ModMuted.cs b/osu.Game/Rulesets/Mods/ModMuted.cs
index 1d33b44812..a7d3114f2b 100644
--- a/osu.Game/Rulesets/Mods/ModMuted.cs
+++ b/osu.Game/Rulesets/Mods/ModMuted.cs
@@ -3,7 +3,6 @@
using System.Linq;
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites;
@@ -71,7 +70,7 @@ namespace osu.Game.Rulesets.Mods
InverseMuting.BindValueChanged(i => MuteComboCount.MinValue = i.NewValue ? 1 : 0, true);
}
- public void ApplyToTrack(ITrack track)
+ public void ApplyToTrack(IAdjustableAudioComponent track)
{
track.AddAdjustment(AdjustableProperty.Volume, mainVolumeAdjust);
}
diff --git a/osu.Game/Rulesets/Mods/ModNightcore.cs b/osu.Game/Rulesets/Mods/ModNightcore.cs
index 993efead33..7997204450 100644
--- a/osu.Game/Rulesets/Mods/ModNightcore.cs
+++ b/osu.Game/Rulesets/Mods/ModNightcore.cs
@@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Mods
}, true);
}
- public override void ApplyToTrack(ITrack track)
+ public override void ApplyToTrack(IAdjustableAudioComponent track)
{
// base.ApplyToTrack() intentionally not called (different tempo adjustment is applied)
track.AddAdjustment(AdjustableProperty.Frequency, freqAdjust);
diff --git a/osu.Game/Rulesets/Mods/ModRateAdjust.cs b/osu.Game/Rulesets/Mods/ModRateAdjust.cs
index 05953f903f..7b55ba4ad0 100644
--- a/osu.Game/Rulesets/Mods/ModRateAdjust.cs
+++ b/osu.Game/Rulesets/Mods/ModRateAdjust.cs
@@ -3,9 +3,7 @@
using System;
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
-using osu.Framework.Graphics.Audio;
namespace osu.Game.Rulesets.Mods
{
@@ -15,12 +13,12 @@ namespace osu.Game.Rulesets.Mods
public abstract BindableNumber SpeedChange { get; }
- public virtual void ApplyToTrack(ITrack track)
+ public virtual void ApplyToTrack(IAdjustableAudioComponent track)
{
track.AddAdjustment(AdjustableProperty.Tempo, SpeedChange);
}
- public virtual void ApplyToSample(DrawableSample sample)
+ public virtual void ApplyToSample(IAdjustableAudioComponent sample)
{
sample.AddAdjustment(AdjustableProperty.Frequency, SpeedChange);
}
diff --git a/osu.Game/Rulesets/Mods/ModTimeRamp.cs b/osu.Game/Rulesets/Mods/ModTimeRamp.cs
index fe6d54332c..98abda872b 100644
--- a/osu.Game/Rulesets/Mods/ModTimeRamp.cs
+++ b/osu.Game/Rulesets/Mods/ModTimeRamp.cs
@@ -4,9 +4,7 @@
using System;
using System.Linq;
using osu.Framework.Audio;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
-using osu.Framework.Graphics.Audio;
using osu.Game.Beatmaps;
using osu.Game.Configuration;
using osu.Game.Rulesets.Objects;
@@ -46,7 +44,7 @@ namespace osu.Game.Rulesets.Mods
Precision = 0.01,
};
- private ITrack track;
+ private IAdjustableAudioComponent track;
protected ModTimeRamp()
{
@@ -55,7 +53,7 @@ namespace osu.Game.Rulesets.Mods
AdjustPitch.BindValueChanged(applyPitchAdjustment);
}
- public void ApplyToTrack(ITrack track)
+ public void ApplyToTrack(IAdjustableAudioComponent track)
{
this.track = track;
@@ -63,7 +61,7 @@ namespace osu.Game.Rulesets.Mods
AdjustPitch.TriggerChange();
}
- public void ApplyToSample(DrawableSample sample)
+ public void ApplyToSample(IAdjustableAudioComponent sample)
{
sample.AddAdjustment(AdjustableProperty.Frequency, SpeedChange);
}
@@ -90,7 +88,7 @@ namespace osu.Game.Rulesets.Mods
public virtual void Update(Playfield playfield)
{
- applyRateAdjustment(track.CurrentTime);
+ applyRateAdjustment(playfield.Clock.CurrentTime);
}
///