mirror of
https://github.com/ppy/osu.git
synced 2025-01-12 17:43:05 +08:00
Move audio adjustment hookup to own method for clarity
This commit is contained in:
parent
e56ff33271
commit
161890292f
@ -126,7 +126,8 @@ namespace osu.Game.Rulesets.Mods
|
||||
|
||||
public ModAdaptiveSpeed()
|
||||
{
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange, AdjustPitch);
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange);
|
||||
rateAdjustHelper.HandleAudioAdjustments(AdjustPitch);
|
||||
|
||||
InitialRate.BindValueChanged(val =>
|
||||
{
|
||||
|
@ -34,7 +34,8 @@ namespace osu.Game.Rulesets.Mods
|
||||
|
||||
protected ModDoubleTime()
|
||||
{
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange, AdjustPitch);
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange);
|
||||
rateAdjustHelper.HandleAudioAdjustments(AdjustPitch);
|
||||
}
|
||||
|
||||
public override void ApplyToTrack(IAdjustableAudioComponent track)
|
||||
|
@ -34,7 +34,8 @@ namespace osu.Game.Rulesets.Mods
|
||||
|
||||
protected ModHalfTime()
|
||||
{
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange, AdjustPitch);
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange);
|
||||
rateAdjustHelper.HandleAudioAdjustments(AdjustPitch);
|
||||
}
|
||||
|
||||
public override void ApplyToTrack(IAdjustableAudioComponent track)
|
||||
|
@ -48,7 +48,8 @@ namespace osu.Game.Rulesets.Mods
|
||||
|
||||
protected ModTimeRamp()
|
||||
{
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange, AdjustPitch);
|
||||
rateAdjustHelper = new RateAdjustModHelper(SpeedChange);
|
||||
rateAdjustHelper.HandleAudioAdjustments(AdjustPitch);
|
||||
|
||||
// for preview purpose at song select. eventually we'll want to be able to update every frame.
|
||||
FinalRate.BindValueChanged(_ => applyRateAdjustment(double.PositiveInfinity), true);
|
||||
|
@ -1,6 +1,7 @@
|
||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using System;
|
||||
using osu.Framework.Audio;
|
||||
using osu.Framework.Bindables;
|
||||
|
||||
@ -11,17 +12,32 @@ namespace osu.Game.Rulesets.Mods
|
||||
/// </summary>
|
||||
public class RateAdjustModHelper : IApplicableToTrack
|
||||
{
|
||||
private readonly BindableBool? adjustPitch;
|
||||
private readonly BindableNumber<double> speedChange;
|
||||
|
||||
private IAdjustableAudioComponent? track;
|
||||
|
||||
public RateAdjustModHelper(BindableNumber<double> speedChange, BindableBool? adjustPitch = null)
|
||||
private BindableBool? adjustPitch;
|
||||
|
||||
/// <summary>
|
||||
/// Construct a new <see cref="RateAdjustModHelper"/>.
|
||||
/// </summary>
|
||||
/// <param name="speedChange">The main speed adjust parameter which is exposed to the user.</param>
|
||||
public RateAdjustModHelper(BindableNumber<double> speedChange)
|
||||
{
|
||||
this.speedChange = speedChange;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Setup audio track adjustments for a rate adjust mod.
|
||||
/// Importantly, <see cref="ApplyToTrack"/> must be called when a track is obtained/changed for this to work.
|
||||
/// </summary>
|
||||
/// <param name="adjustPitch">The "adjust pitch" setting as exposed to the user.</param>
|
||||
public void HandleAudioAdjustments(BindableBool adjustPitch)
|
||||
{
|
||||
this.adjustPitch = adjustPitch;
|
||||
|
||||
// When switching between pitch adjust, we need to update adjustments to time-shift or frequency-scale.
|
||||
adjustPitch?.BindValueChanged(adjustPitchSetting =>
|
||||
adjustPitch.BindValueChanged(adjustPitchSetting =>
|
||||
{
|
||||
track?.RemoveAdjustment(adjustmentForPitchSetting(adjustPitchSetting.OldValue), speedChange);
|
||||
track?.AddAdjustment(adjustmentForPitchSetting(adjustPitchSetting.NewValue), speedChange);
|
||||
@ -31,12 +47,23 @@ namespace osu.Game.Rulesets.Mods
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Should be invoked when a track is obtained / changed.
|
||||
/// </summary>
|
||||
/// <param name="track">The new track.</param>
|
||||
/// <exception cref="InvalidOperationException">If this method is called before <see cref="HandleAudioAdjustments"/>.</exception>
|
||||
public void ApplyToTrack(IAdjustableAudioComponent track)
|
||||
{
|
||||
if (adjustPitch == null)
|
||||
throw new InvalidOperationException($"Must call {nameof(HandleAudioAdjustments)} first");
|
||||
|
||||
this.track = track;
|
||||
adjustPitch?.TriggerChange();
|
||||
adjustPitch.TriggerChange();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The score multiplier for the current <see cref="speedChange"/>.
|
||||
/// </summary>
|
||||
public double ScoreMultiplier
|
||||
{
|
||||
get
|
||||
|
Loading…
Reference in New Issue
Block a user