diff --git a/osu.Game.Tests/Visual/Audio/TestSceneFilter.cs b/osu.Game.Tests/Visual/Audio/TestSceneFilter.cs
index c639da63d3..6e5c8e8850 100644
--- a/osu.Game.Tests/Visual/Audio/TestSceneFilter.cs
+++ b/osu.Game.Tests/Visual/Audio/TestSceneFilter.cs
@@ -66,10 +66,10 @@ namespace osu.Game.Tests.Visual.Audio
}
[Test]
- public void TestLowPass() => testFilter(lowpassFilter, lowpassFilter.MaxCutoff, 0);
+ public void TestLowPass() => testFilter(lowpassFilter, AudioFilter.MAX_LOWPASS_CUTOFF, 0);
[Test]
- public void TestHighPass() => testFilter(highpassFilter, 0, highpassFilter.MaxCutoff);
+ public void TestHighPass() => testFilter(highpassFilter, 0, AudioFilter.MAX_LOWPASS_CUTOFF);
private void testFilter(Filter filter, int cutoffFrom, int cutoffTo)
{
diff --git a/osu.Game/Audio/Effects/Filter.cs b/osu.Game/Audio/Effects/AudioFilter.cs
similarity index 80%
rename from osu.Game/Audio/Effects/Filter.cs
rename to osu.Game/Audio/Effects/AudioFilter.cs
index 428a69bb19..611ece5bdb 100644
--- a/osu.Game/Audio/Effects/Filter.cs
+++ b/osu.Game/Audio/Effects/AudioFilter.cs
@@ -11,11 +11,19 @@ namespace osu.Game.Audio.Effects
{
public class Filter : Component, ITransformableFilter
{
- public readonly int MaxCutoff = 22049; // nyquist - 1hz
+ ///
+ /// The maximum cutoff frequency that can be used with a low-pass filter.
+ /// This is equal to nyquist - 1hz.
+ ///
+ public const int MAX_LOWPASS_CUTOFF = 22049; // nyquist - 1hz
+
private readonly AudioMixer mixer;
private readonly BQFParameters filter;
private readonly BQFType type;
+ ///
+ /// The current cutoff of this filter.
+ ///
public BindableNumber Cutoff { get; }
///
@@ -37,7 +45,7 @@ namespace osu.Game.Audio.Effects
break;
case BQFType.LowPass:
- initialCutoff = MaxCutoff;
+ initialCutoff = MAX_LOWPASS_CUTOFF;
break;
default:
@@ -48,8 +56,9 @@ namespace osu.Game.Audio.Effects
Cutoff = new BindableNumber(initialCutoff)
{
MinValue = 1,
- MaxValue = MaxCutoff
+ MaxValue = MAX_LOWPASS_CUTOFF
};
+
filter = new BQFParameters
{
lFilter = type,
@@ -82,13 +91,13 @@ namespace osu.Game.Audio.Effects
// Workaround for weird behaviour when rapidly setting fCenter of a low-pass filter to nyquist - 1hz.
if (type == BQFType.LowPass)
{
- if (cutoff.NewValue >= MaxCutoff)
+ if (cutoff.NewValue >= MAX_LOWPASS_CUTOFF)
{
detachFilter();
return;
}
- if (cutoff.OldValue >= MaxCutoff && cutoff.NewValue < MaxCutoff)
+ if (cutoff.OldValue >= MAX_LOWPASS_CUTOFF && cutoff.NewValue < MAX_LOWPASS_CUTOFF)
attachFilter();
}
@@ -108,11 +117,13 @@ namespace osu.Game.Audio.Effects
var filterIndex = mixer.Effects.IndexOf(filter);
if (filterIndex < 0) return;
- var existingFilter = mixer.Effects[filterIndex] as BQFParameters;
- if (existingFilter == null) return;
+ if (mixer.Effects[filterIndex] is BQFParameters existingFilter)
+ {
+ existingFilter.fCenter = cutoff.NewValue;
- existingFilter.fCenter = cutoff.NewValue;
- mixer.Effects[filterIndex] = existingFilter;
+ // required to update effect with new parameters.
+ mixer.Effects[filterIndex] = existingFilter;
+ }
}
protected override void Dispose(bool isDisposing)
diff --git a/osu.Game/Overlays/DialogOverlay.cs b/osu.Game/Overlays/DialogOverlay.cs
index bd20b74970..5f4ab35a03 100644
--- a/osu.Game/Overlays/DialogOverlay.cs
+++ b/osu.Game/Overlays/DialogOverlay.cs
@@ -89,7 +89,7 @@ namespace osu.Game.Overlays
{
base.PopOut();
- lpFilter.CutoffTo(lpFilter.MaxCutoff, 100, Easing.InCubic);
+ lpFilter.CutoffTo(AudioFilter.MAX_LOWPASS_CUTOFF, 100, Easing.InCubic);
if (CurrentDialog?.State.Value == Visibility.Visible)
{