Просмотр исходного кода

[Ryujinx.Audio] Address dotnet-format issues (#5362)

* dotnet format style --severity info

Some changes were manually reverted.

* dotnet format analyzers --serverity info

Some changes have been minimally adapted.

* Restore a few unused methods and variables

* Silence dotnet format IDE0060 warnings

* Silence dotnet format IDE0052 warnings

* Address dotnet format CA1816 warnings

* Address or silence dotnet format CA2208 warnings

* Address or silence dotnet format CA2211 warnings

* Address review comments

* Address most dotnet format whitespace warnings

* Apply dotnet format whitespace formatting

A few of them have been manually reverted and the corresponding warning was silenced

* Format if-blocks correctly

* Run dotnet format whitespace after rebase

* Run dotnet format after rebase and remove unused usings

- analyzers
- style
- whitespace

* Add comments to disabled warnings

* Remove a few unused parameters

* Simplify properties and array initialization, Use const when possible, Remove trailing commas

* Start working on disabled warnings

* Fix and silence a few dotnet-format warnings again

* Address IDE0251 warnings

* Silence IDE0060 in .editorconfig

* Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas"

This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e.

* dotnet format whitespace after rebase

* Fix naming rule violations, remove redundant code and fix build issues

* Apply suggestions from code review

Co-authored-by: Ac_K <Acoustik666@gmail.com>

* Add trailing commas

* Apply suggestions from code review

Co-authored-by: Ac_K <Acoustik666@gmail.com>

* Address review feedback

---------

Co-authored-by: Ac_K <Acoustik666@gmail.com>
TSRBerry 2 лет назад
Родитель
Сommit
515fc32b21
100 измененных файлов с 444 добавлено и 420 удалено
  1. 6 5
      src/Ryujinx.Audio/AudioManager.cs
  2. 1 1
      src/Ryujinx.Audio/Backends/Common/BackendHelper.cs
  3. 1 1
      src/Ryujinx.Audio/Backends/Common/DynamicRingBuffer.cs
  4. 2 5
      src/Ryujinx.Audio/Backends/Common/HardwareDeviceSessionOutputBase.cs
  5. 7 7
      src/Ryujinx.Audio/Backends/CompatLayer/CompatLayerHardwareDeviceDriver.cs
  6. 6 6
      src/Ryujinx.Audio/Backends/CompatLayer/CompatLayerHardwareDeviceSession.cs
  7. 7 7
      src/Ryujinx.Audio/Backends/CompatLayer/Downmixing.cs
  8. 7 8
      src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs
  9. 4 4
      src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceSessionInput.cs
  10. 2 2
      src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceSessionOutput.cs
  11. 1 1
      src/Ryujinx.Audio/Common/AudioBuffer.cs
  12. 9 11
      src/Ryujinx.Audio/Common/AudioDeviceSession.cs
  13. 2 2
      src/Ryujinx.Audio/Common/AudioDeviceState.cs
  14. 2 2
      src/Ryujinx.Audio/Common/AudioInputConfiguration.cs
  15. 1 1
      src/Ryujinx.Audio/Common/AudioOutputConfiguration.cs
  16. 1 1
      src/Ryujinx.Audio/Common/AudioUserBuffer.cs
  17. 2 2
      src/Ryujinx.Audio/Common/SampleFormat.cs
  18. 1 1
      src/Ryujinx.Audio/Constants.cs
  19. 9 5
      src/Ryujinx.Audio/Input/AudioInputManager.cs
  20. 14 10
      src/Ryujinx.Audio/Input/AudioInputSystem.cs
  21. 7 6
      src/Ryujinx.Audio/Integration/HardwareDeviceImpl.cs
  22. 1 1
      src/Ryujinx.Audio/Integration/IHardwareDevice.cs
  23. 2 2
      src/Ryujinx.Audio/Integration/IHardwareDeviceDriver.cs
  24. 1 1
      src/Ryujinx.Audio/Integration/IHardwareDeviceSession.cs
  25. 1 1
      src/Ryujinx.Audio/Integration/IWritableEvent.cs
  26. 10 5
      src/Ryujinx.Audio/Output/AudioOutputManager.cs
  27. 11 7
      src/Ryujinx.Audio/Output/AudioOutputSystem.cs
  28. 1 1
      src/Ryujinx.Audio/Renderer/Common/AuxiliaryBufferAddresses.cs
  29. 3 3
      src/Ryujinx.Audio/Renderer/Common/BehaviourParameter.cs
  30. 1 1
      src/Ryujinx.Audio/Renderer/Common/EdgeMatrix.cs
  31. 1 1
      src/Ryujinx.Audio/Renderer/Common/EffectType.cs
  32. 2 2
      src/Ryujinx.Audio/Renderer/Common/MemoryPoolUserState.cs
  33. 1 1
      src/Ryujinx.Audio/Renderer/Common/NodeIdHelper.cs
  34. 2 2
      src/Ryujinx.Audio/Renderer/Common/NodeIdType.cs
  35. 13 12
      src/Ryujinx.Audio/Renderer/Common/NodeStates.cs
  36. 2 2
      src/Ryujinx.Audio/Renderer/Common/PerformanceDetailType.cs
  37. 2 2
      src/Ryujinx.Audio/Renderer/Common/PerformanceEntryType.cs
  38. 2 2
      src/Ryujinx.Audio/Renderer/Common/PlayState.cs
  39. 2 2
      src/Ryujinx.Audio/Renderer/Common/ReverbEarlyMode.cs
  40. 2 2
      src/Ryujinx.Audio/Renderer/Common/ReverbLateMode.cs
  41. 2 2
      src/Ryujinx.Audio/Renderer/Common/SinkType.cs
  42. 5 2
      src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs
  43. 1 1
      src/Ryujinx.Audio/Renderer/Common/VoiceUpdateState.cs
  44. 2 3
      src/Ryujinx.Audio/Renderer/Common/WaveBuffer.cs
  45. 4 4
      src/Ryujinx.Audio/Renderer/Common/WorkBufferAllocator.cs
  46. 6 6
      src/Ryujinx.Audio/Renderer/Device/VirtualDevice.cs
  47. 1 1
      src/Ryujinx.Audio/Renderer/Device/VirtualDeviceSession.cs
  48. 4 2
      src/Ryujinx.Audio/Renderer/Device/VirtualDeviceSessionRegistry.cs
  49. 8 2
      src/Ryujinx.Audio/Renderer/Dsp/AdpcmHelper.cs
  50. 11 10
      src/Ryujinx.Audio/Renderer/Dsp/AudioProcessor.cs
  51. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/BiquadFilterHelper.cs
  52. 5 3
      src/Ryujinx.Audio/Renderer/Dsp/Command/AdpcmDataSourceCommandVersion1.cs
  53. 2 2
      src/Ryujinx.Audio/Renderer/Dsp/Command/AuxiliaryBufferCommand.cs
  54. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/BiquadFilterCommand.cs
  55. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/CaptureBufferCommand.cs
  56. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/ClearMixBufferCommand.cs
  57. 3 2
      src/Ryujinx.Audio/Renderer/Dsp/Command/CommandList.cs
  58. 2 2
      src/Ryujinx.Audio/Renderer/Dsp/Command/CommandType.cs
  59. 3 2
      src/Ryujinx.Audio/Renderer/Dsp/Command/CompressorCommand.cs
  60. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/CopyMixBufferCommand.cs
  61. 12 14
      src/Ryujinx.Audio/Renderer/Dsp/Command/DataSourceVersion2Command.cs
  62. 13 13
      src/Ryujinx.Audio/Renderer/Dsp/Command/DelayCommand.cs
  63. 7 9
      src/Ryujinx.Audio/Renderer/Dsp/Command/DepopForMixBuffersCommand.cs
  64. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/DepopPrepareCommand.cs
  65. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/DownMixSurroundToStereoCommand.cs
  66. 6 6
      src/Ryujinx.Audio/Renderer/Dsp/Command/GroupedBiquadFilterCommand.cs
  67. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/ICommand.cs
  68. 5 4
      src/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion1.cs
  69. 5 4
      src/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs
  70. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/MixCommand.cs
  71. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/MixRampCommand.cs
  72. 2 2
      src/Ryujinx.Audio/Renderer/Dsp/Command/MixRampGroupedCommand.cs
  73. 5 3
      src/Ryujinx.Audio/Renderer/Dsp/Command/PcmFloatDataSourceCommandVersion1.cs
  74. 5 3
      src/Ryujinx.Audio/Renderer/Dsp/Command/PcmInt16DataSourceCommandVersion1.cs
  75. 2 2
      src/Ryujinx.Audio/Renderer/Dsp/Command/PerformanceCommand.cs
  76. 17 17
      src/Ryujinx.Audio/Renderer/Dsp/Command/Reverb3dCommand.cs
  77. 40 39
      src/Ryujinx.Audio/Renderer/Dsp/Command/ReverbCommand.cs
  78. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs
  79. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/VolumeCommand.cs
  80. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Command/VolumeRampCommand.cs
  81. 6 6
      src/Ryujinx.Audio/Renderer/Dsp/DataSourceHelper.cs
  82. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Effect/DecayDelay.cs
  83. 3 3
      src/Ryujinx.Audio/Renderer/Dsp/Effect/DelayLine.cs
  84. 3 3
      src/Ryujinx.Audio/Renderer/Dsp/Effect/DelayLineReverb3d.cs
  85. 2 4
      src/Ryujinx.Audio/Renderer/Dsp/Effect/ExponentialMovingAverage.cs
  86. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/Effect/IDelayLine.cs
  87. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/FixedPointHelper.cs
  88. 3 3
      src/Ryujinx.Audio/Renderer/Dsp/FloatingPointHelper.cs
  89. 2 3
      src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs
  90. 20 25
      src/Ryujinx.Audio/Renderer/Dsp/ResamplerHelper.cs
  91. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/State/AdpcmLoopContext.cs
  92. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/State/AuxiliaryBufferHeader.cs
  93. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/State/BiquadFilterState.cs
  94. 1 1
      src/Ryujinx.Audio/Renderer/Dsp/State/DelayState.cs
  95. 4 4
      src/Ryujinx.Audio/Renderer/Dsp/State/LimiterState.cs
  96. 12 12
      src/Ryujinx.Audio/Renderer/Dsp/State/Reverb3dState.cs
  97. 16 16
      src/Ryujinx.Audio/Renderer/Dsp/State/ReverbState.cs
  98. 20 20
      src/Ryujinx.Audio/Renderer/Dsp/UpsamplerHelper.cs
  99. 2 2
      src/Ryujinx.Audio/Renderer/Parameter/AudioRendererConfiguration.cs
  100. 1 1
      src/Ryujinx.Audio/Renderer/Parameter/BehaviourErrorInfoOutStatus.cs

+ 6 - 5
src/Ryujinx.Audio/AudioManager.cs

@@ -16,17 +16,17 @@ namespace Ryujinx.Audio
         /// <summary>
         /// Events signaled when the driver played audio buffers.
         /// </summary>
-        private ManualResetEvent[] _updateRequiredEvents;
+        private readonly ManualResetEvent[] _updateRequiredEvents;
 
         /// <summary>
         /// Action to execute when the driver played audio buffers.
         /// </summary>
-        private Action[] _actions;
+        private readonly Action[] _actions;
 
         /// <summary>
         /// The worker thread in charge of handling sessions update.
         /// </summary>
-        private Thread _workerThread;
+        private readonly Thread _workerThread;
 
         private bool _isRunning;
 
@@ -44,7 +44,7 @@ namespace Ryujinx.Audio
 
             _workerThread = new Thread(Update)
             {
-                Name = "AudioManager.Worker"
+                Name = "AudioManager.Worker",
             };
         }
 
@@ -115,6 +115,7 @@ namespace Ryujinx.Audio
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
 
@@ -129,4 +130,4 @@ namespace Ryujinx.Audio
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Backends/Common/BackendHelper.cs

@@ -23,4 +23,4 @@ namespace Ryujinx.Audio.Backends.Common
             return bufferSize / GetSampleSize(format) / channelCount;
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Backends/Common/DynamicRingBuffer.cs

@@ -163,4 +163,4 @@ namespace Ryujinx.Audio.Backends.Common
             }
         }
     }
-}
+}

+ 2 - 5
src/Ryujinx.Audio/Backends/Common/HardwareDeviceSessionOutputBase.cs

@@ -66,14 +66,11 @@ namespace Ryujinx.Audio.Backends.Common
                 return false;
             }
 
-            if (buffer.Data == null)
-            {
-                buffer.Data = samples;
-            }
+            buffer.Data ??= samples;
 
             return true;
         }
 
         public virtual void UnregisterBuffer(AudioBuffer buffer) { }
     }
-}
+}

+ 7 - 7
src/Ryujinx.Audio/Backends/CompatLayer/CompatLayerHardwareDeviceDriver.cs

@@ -6,14 +6,13 @@ using Ryujinx.Common.Logging;
 using Ryujinx.Memory;
 using System;
 using System.Threading;
-
 using static Ryujinx.Audio.Integration.IHardwareDeviceDriver;
 
 namespace Ryujinx.Audio.Backends.CompatLayer
 {
     public class CompatLayerHardwareDeviceDriver : IHardwareDeviceDriver
     {
-        private IHardwareDeviceDriver _realDriver;
+        private readonly IHardwareDeviceDriver _realDriver;
 
         public static bool IsSupported => true;
 
@@ -24,6 +23,7 @@ namespace Ryujinx.Audio.Backends.CompatLayer
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             _realDriver.Dispose();
         }
 
@@ -49,7 +49,7 @@ namespace Ryujinx.Audio.Backends.CompatLayer
                 6 => SelectHardwareChannelCount(2),
                 2 => SelectHardwareChannelCount(1),
                 1 => throw new ArgumentException("No valid channel configuration found!"),
-                _ => throw new ArgumentException($"Invalid targetChannelCount {targetChannelCount}")
+                _ => throw new ArgumentException($"Invalid targetChannelCount {targetChannelCount}"),
             };
         }
 
@@ -110,7 +110,7 @@ namespace Ryujinx.Audio.Backends.CompatLayer
                 {
                     Logger.Warning?.Print(LogClass.Audio, "The selected audio backend doesn't support audio input, fallback to dummy...");
 
-                    return new DummyHardwareDeviceSessionInput(this, memoryManager, sampleFormat, sampleRate, channelCount);
+                    return new DummyHardwareDeviceSessionInput(this, memoryManager);
                 }
 
                 throw new NotImplementedException();
@@ -138,12 +138,12 @@ namespace Ryujinx.Audio.Backends.CompatLayer
 
             if (direction == Direction.Input)
             {
-                Logger.Warning?.Print(LogClass.Audio, $"The selected audio backend doesn't support the requested audio input configuration, fallback to dummy...");
+                Logger.Warning?.Print(LogClass.Audio, "The selected audio backend doesn't support the requested audio input configuration, fallback to dummy...");
 
                 // TODO: We currently don't support audio input upsampling/downsampling, implement this.
                 realSession.Dispose();
 
-                return new DummyHardwareDeviceSessionInput(this, memoryManager, sampleFormat, sampleRate, channelCount);
+                return new DummyHardwareDeviceSessionInput(this, memoryManager);
             }
 
             // It must be a HardwareDeviceSessionOutputBase.
@@ -183,4 +183,4 @@ namespace Ryujinx.Audio.Backends.CompatLayer
             return direction == Direction.Input || direction == Direction.Output;
         }
     }
-}
+}

+ 6 - 6
src/Ryujinx.Audio/Backends/CompatLayer/CompatLayerHardwareDeviceSession.cs

@@ -8,9 +8,9 @@ namespace Ryujinx.Audio.Backends.CompatLayer
 {
     class CompatLayerHardwareDeviceSession : HardwareDeviceSessionOutputBase
     {
-        private HardwareDeviceSessionOutputBase _realSession;
-        private SampleFormat _userSampleFormat;
-        private uint _userChannelCount;
+        private readonly HardwareDeviceSessionOutputBase _realSession;
+        private readonly SampleFormat _userSampleFormat;
+        private readonly uint _userChannelCount;
 
         public CompatLayerHardwareDeviceSession(HardwareDeviceSessionOutputBase realSession, SampleFormat userSampleFormat, uint userChannelCount) : base(realSession.MemoryManager, realSession.RequestedSampleFormat, realSession.RequestedSampleRate, userChannelCount)
         {
@@ -116,11 +116,11 @@ namespace Ryujinx.Audio.Backends.CompatLayer
                 samples = MemoryMarshal.Cast<short, byte>(samplesPCM16).ToArray();
             }
 
-            AudioBuffer fakeBuffer = new AudioBuffer
+            AudioBuffer fakeBuffer = new()
             {
                 BufferTag = buffer.BufferTag,
                 DataPointer = buffer.DataPointer,
-                DataSize = (ulong)samples.Length
+                DataSize = (ulong)samples.Length,
             };
 
             bool result = _realSession.RegisterBuffer(fakeBuffer, samples);
@@ -159,4 +159,4 @@ namespace Ryujinx.Audio.Backends.CompatLayer
             return _realSession.WasBufferFullyConsumed(buffer);
         }
     }
-}
+}

+ 7 - 7
src/Ryujinx.Audio/Backends/CompatLayer/Downmixing.cs

@@ -31,18 +31,18 @@ namespace Ryujinx.Audio.Backends.CompatLayer
         private const int Minus6dBInQ15 = (int)(0.501f * RawQ15One);
         private const int Minus12dBInQ15 = (int)(0.251f * RawQ15One);
 
-        private static readonly int[] DefaultSurroundToStereoCoefficients = new int[4]
+        private static readonly int[] _defaultSurroundToStereoCoefficients = new int[4]
         {
             RawQ15One,
             Minus3dBInQ15,
             Minus12dBInQ15,
-            Minus3dBInQ15
+            Minus3dBInQ15,
         };
 
-        private static readonly int[] DefaultStereoToMonoCoefficients = new int[2]
+        private static readonly int[] _defaultStereoToMonoCoefficients = new int[2]
         {
             Minus6dBInQ15,
-            Minus6dBInQ15
+            Minus6dBInQ15,
         };
 
         private const int SurroundChannelCount = 6;
@@ -114,12 +114,12 @@ namespace Ryujinx.Audio.Backends.CompatLayer
 
         public static short[] DownMixStereoToMono(ReadOnlySpan<short> data)
         {
-            return DownMixStereoToMono(DefaultStereoToMonoCoefficients, data);
+            return DownMixStereoToMono(_defaultStereoToMonoCoefficients, data);
         }
 
         public static short[] DownMixSurroundToStereo(ReadOnlySpan<short> data)
         {
-            return DownMixSurroundToStereo(DefaultSurroundToStereoCoefficients, data);
+            return DownMixSurroundToStereo(_defaultSurroundToStereoCoefficients, data);
         }
     }
-}
+}

+ 7 - 8
src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs

@@ -1,16 +1,16 @@
 using Ryujinx.Audio.Common;
 using Ryujinx.Audio.Integration;
 using Ryujinx.Memory;
+using System;
 using System.Threading;
-
 using static Ryujinx.Audio.Integration.IHardwareDeviceDriver;
 
 namespace Ryujinx.Audio.Backends.Dummy
 {
     public class DummyHardwareDeviceDriver : IHardwareDeviceDriver
     {
-        private ManualResetEvent _updateRequiredEvent;
-        private ManualResetEvent _pauseEvent;
+        private readonly ManualResetEvent _updateRequiredEvent;
+        private readonly ManualResetEvent _pauseEvent;
 
         public static bool IsSupported => true;
 
@@ -36,10 +36,8 @@ namespace Ryujinx.Audio.Backends.Dummy
             {
                 return new DummyHardwareDeviceSessionOutput(this, memoryManager, sampleFormat, sampleRate, channelCount, volume);
             }
-            else
-            {
-                return new DummyHardwareDeviceSessionInput(this, memoryManager, sampleFormat, sampleRate, channelCount);
-            }
+
+            return new DummyHardwareDeviceSessionInput(this, memoryManager);
         }
 
         public ManualResetEvent GetUpdateRequiredEvent()
@@ -54,6 +52,7 @@ namespace Ryujinx.Audio.Backends.Dummy
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
 
@@ -86,4 +85,4 @@ namespace Ryujinx.Audio.Backends.Dummy
             return channelCount == 1 || channelCount == 2 || channelCount == 6;
         }
     }
-}
+}

+ 4 - 4
src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceSessionInput.cs

@@ -8,10 +8,10 @@ namespace Ryujinx.Audio.Backends.Dummy
     class DummyHardwareDeviceSessionInput : IHardwareDeviceSession
     {
         private float _volume;
-        private IHardwareDeviceDriver _manager;
-        private IVirtualMemoryManager _memoryManager;
+        private readonly IHardwareDeviceDriver _manager;
+        private readonly IVirtualMemoryManager _memoryManager;
 
-        public DummyHardwareDeviceSessionInput(IHardwareDeviceDriver manager, IVirtualMemoryManager memoryManager, SampleFormat requestedSampleFormat, uint requestedSampleRate, uint requestedChannelCount)
+        public DummyHardwareDeviceSessionInput(IHardwareDeviceDriver manager, IVirtualMemoryManager memoryManager)
         {
             _volume = 1.0f;
             _manager = manager;
@@ -64,4 +64,4 @@ namespace Ryujinx.Audio.Backends.Dummy
             return true;
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceSessionOutput.cs

@@ -9,7 +9,7 @@ namespace Ryujinx.Audio.Backends.Dummy
     internal class DummyHardwareDeviceSessionOutput : HardwareDeviceSessionOutputBase
     {
         private float _volume;
-        private IHardwareDeviceDriver _manager;
+        private readonly IHardwareDeviceDriver _manager;
 
         private ulong _playedSampleCount;
 
@@ -59,4 +59,4 @@ namespace Ryujinx.Audio.Backends.Dummy
             return true;
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Common/AudioBuffer.cs

@@ -34,4 +34,4 @@ namespace Ryujinx.Audio.Common
         /// </summary>
         public byte[] Data;
     }
-}
+}

+ 9 - 11
src/Ryujinx.Audio/Common/AudioDeviceSession.cs

@@ -23,7 +23,7 @@ namespace Ryujinx.Audio.Common
         /// <summary>
         /// Array of all buffers currently used or released.
         /// </summary>
-        private AudioBuffer[] _buffers;
+        private readonly AudioBuffer[] _buffers;
 
         /// <summary>
         /// The server index inside <see cref="_buffers"/> (appended but not queued to device driver).
@@ -58,17 +58,17 @@ namespace Ryujinx.Audio.Common
         /// <summary>
         /// The released buffer event.
         /// </summary>
-        private IWritableEvent _bufferEvent;
+        private readonly IWritableEvent _bufferEvent;
 
         /// <summary>
         /// The session on the device driver.
         /// </summary>
-        private IHardwareDeviceSession _hardwareDeviceSession;
+        private readonly IHardwareDeviceSession _hardwareDeviceSession;
 
         /// <summary>
         /// Max number of buffers that can be registered to the device driver at a time.
         /// </summary>
-        private uint _bufferRegisteredLimit;
+        private readonly uint _bufferRegisteredLimit;
 
         /// <summary>
         /// Create a new <see cref="AudioDeviceSession"/>.
@@ -311,9 +311,9 @@ namespace Ryujinx.Audio.Common
             return false;
         }
 
-        public bool AppendUacBuffer(AudioBuffer buffer, uint handle)
+        public static bool AppendUacBuffer(AudioBuffer buffer, uint handle)
         {
-            // NOTE: On hardware, there is another RegisterBuffer method taking an handle.
+            // NOTE: On hardware, there is another RegisterBuffer method taking a handle.
             // This variant of the call always return false (stubbed?) as a result this logic will never succeed.
 
             return false;
@@ -425,10 +425,8 @@ namespace Ryujinx.Audio.Common
             {
                 return 0;
             }
-            else
-            {
-                return _hardwareDeviceSession.GetPlayedSampleCount();
-            }
+
+            return _hardwareDeviceSession.GetPlayedSampleCount();
         }
 
         /// <summary>
@@ -515,4 +513,4 @@ namespace Ryujinx.Audio.Common
             }
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Common/AudioDeviceState.cs

@@ -13,6 +13,6 @@ namespace Ryujinx.Audio.Common
         /// <summary>
         /// The audio device is stopped.
         /// </summary>
-        Stopped
+        Stopped,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Common/AudioInputConfiguration.cs

@@ -24,6 +24,6 @@ namespace Ryujinx.Audio.Common
         /// <summary>
         /// Reserved/unused.
         /// </summary>
-        private ushort _reserved;
+        private readonly ushort _reserved;
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Common/AudioOutputConfiguration.cs

@@ -34,4 +34,4 @@ namespace Ryujinx.Audio.Common
         /// </summary>
         public AudioDeviceState AudioOutState;
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Common/AudioUserBuffer.cs

@@ -33,4 +33,4 @@ namespace Ryujinx.Audio.Common
         /// </summary>
         public ulong DataOffset;
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Common/SampleFormat.cs

@@ -38,6 +38,6 @@ namespace Ryujinx.Audio.Common
         /// <summary>
         /// ADPCM sample format. (Also known as GC-ADPCM)
         /// </summary>
-        Adpcm = 6
+        Adpcm = 6,
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Constants.cs

@@ -172,4 +172,4 @@ namespace Ryujinx.Audio
             0.707f,
         };
     }
-}
+}

+ 9 - 5
src/Ryujinx.Audio/Input/AudioInputManager.cs

@@ -24,7 +24,7 @@ namespace Ryujinx.Audio.Input
         /// <summary>
         /// The session ids allocation table.
         /// </summary>
-        private int[] _sessionIds;
+        private readonly int[] _sessionIds;
 
         /// <summary>
         /// The device driver.
@@ -39,7 +39,7 @@ namespace Ryujinx.Audio.Input
         /// <summary>
         /// The <see cref="AudioInputSystem"/> session instances.
         /// </summary>
-        private AudioInputSystem[] _sessions;
+        private readonly AudioInputSystem[] _sessions;
 
         /// <summary>
         /// The count of active sessions.
@@ -166,6 +166,7 @@ namespace Ryujinx.Audio.Input
         /// </summary>
         /// <param name="filtered">If true, filter disconnected devices</param>
         /// <returns>The list of all audio inputs name</returns>
+#pragma warning disable CA1822 // Mark member as static
         public string[] ListAudioIns(bool filtered)
         {
             if (filtered)
@@ -173,8 +174,9 @@ namespace Ryujinx.Audio.Input
                 // TODO: Detect if the driver supports audio input
             }
 
-            return new string[] { Constants.DefaultDeviceInputName };
+            return new[] { Constants.DefaultDeviceInputName };
         }
+#pragma warning restore CA1822
 
         /// <summary>
         /// Open a new <see cref="AudioInputSystem"/>.
@@ -205,7 +207,7 @@ namespace Ryujinx.Audio.Input
 
             IHardwareDeviceSession deviceSession = _deviceDriver.OpenDeviceSession(IHardwareDeviceDriver.Direction.Input, memoryManager, sampleFormat, parameter.SampleRate, parameter.ChannelCount);
 
-            AudioInputSystem audioIn = new AudioInputSystem(this, _lock, deviceSession, _sessionsBufferEvents[sessionId]);
+            AudioInputSystem audioIn = new(this, _lock, deviceSession, _sessionsBufferEvents[sessionId]);
 
             ResultCode result = audioIn.Initialize(inputDeviceName, sampleFormat, ref parameter, sessionId);
 
@@ -238,6 +240,8 @@ namespace Ryujinx.Audio.Input
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
+
             if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
             {
                 Dispose(true);
@@ -263,4 +267,4 @@ namespace Ryujinx.Audio.Input
             }
         }
     }
-}
+}

+ 14 - 10
src/Ryujinx.Audio/Input/AudioInputSystem.cs

@@ -18,7 +18,7 @@ namespace Ryujinx.Audio.Input
         /// <summary>
         /// The session the <see cref="AudioInputSystem"/>.
         /// </summary>
-        private AudioDeviceSession _session;
+        private readonly AudioDeviceSession _session;
 
         /// <summary>
         /// The target device name of the <see cref="AudioInputSystem"/>.
@@ -43,7 +43,7 @@ namespace Ryujinx.Audio.Input
         /// <summary>
         /// The <see cref="AudioInputManager"/> owning this.
         /// </summary>
-        private AudioInputManager _manager;
+        private readonly AudioInputManager _manager;
 
         /// <summary>
         /// The lock of the parent.
@@ -90,11 +90,13 @@ namespace Ryujinx.Audio.Input
             {
                 return ResultCode.DeviceNotFound;
             }
-            else if (configuration.SampleRate != 0 && configuration.SampleRate != Constants.TargetSampleRate)
+
+            if (configuration.SampleRate != 0 && configuration.SampleRate != Constants.TargetSampleRate)
             {
                 return ResultCode.UnsupportedSampleRate;
             }
-            else if (configuration.ChannelCount != 0 && configuration.ChannelCount != 1 && configuration.ChannelCount != 2 && configuration.ChannelCount != 6)
+
+            if (configuration.ChannelCount != 0 && configuration.ChannelCount != 1 && configuration.ChannelCount != 2 && configuration.ChannelCount != 6)
             {
                 return ResultCode.UnsupportedChannelConfiguration;
             }
@@ -185,11 +187,11 @@ namespace Ryujinx.Audio.Input
         {
             lock (_parentLock)
             {
-                AudioBuffer buffer = new AudioBuffer
+                AudioBuffer buffer = new()
                 {
                     BufferTag = bufferTag,
                     DataPointer = userBuffer.Data,
-                    DataSize = userBuffer.DataSize
+                    DataSize = userBuffer.DataSize,
                 };
 
                 if (_session.AppendBuffer(buffer))
@@ -213,14 +215,14 @@ namespace Ryujinx.Audio.Input
         {
             lock (_parentLock)
             {
-                AudioBuffer buffer = new AudioBuffer
+                AudioBuffer buffer = new()
                 {
                     BufferTag = bufferTag,
                     DataPointer = userBuffer.Data,
-                    DataSize = userBuffer.DataSize
+                    DataSize = userBuffer.DataSize,
                 };
 
-                if (_session.AppendUacBuffer(buffer, handle))
+                if (AudioDeviceSession.AppendUacBuffer(buffer, handle))
                 {
                     return ResultCode.Success;
                 }
@@ -373,6 +375,8 @@ namespace Ryujinx.Audio.Input
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
+
             if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
             {
                 Dispose(true);
@@ -389,4 +393,4 @@ namespace Ryujinx.Audio.Input
             }
         }
     }
-}
+}

+ 7 - 6
src/Ryujinx.Audio/Integration/HardwareDeviceImpl.cs

@@ -6,12 +6,12 @@ namespace Ryujinx.Audio.Integration
 {
     public class HardwareDeviceImpl : IHardwareDevice
     {
-        private IHardwareDeviceSession _session;
-        private uint _channelCount;
-        private uint _sampleRate;
+        private readonly IHardwareDeviceSession _session;
+        private readonly uint _channelCount;
+        private readonly uint _sampleRate;
         private uint _currentBufferTag;
 
-        private byte[] _buffer;
+        private readonly byte[] _buffer;
 
         public HardwareDeviceImpl(IHardwareDeviceDriver deviceDriver, uint channelCount, uint sampleRate, float volume)
         {
@@ -36,7 +36,7 @@ namespace Ryujinx.Audio.Integration
                 DataSize = (ulong)_buffer.Length,
             });
 
-            _currentBufferTag = _currentBufferTag % 4;
+            _currentBufferTag %= 4;
         }
 
         public void SetVolume(float volume)
@@ -61,6 +61,7 @@ namespace Ryujinx.Audio.Integration
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
 
@@ -72,4 +73,4 @@ namespace Ryujinx.Audio.Integration
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Integration/IHardwareDevice.cs

@@ -52,4 +52,4 @@ namespace Ryujinx.Audio.Integration
             return channelCount != Constants.ChannelCountMax;
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Integration/IHardwareDeviceDriver.cs

@@ -13,7 +13,7 @@ namespace Ryujinx.Audio.Integration
         public enum Direction
         {
             Input,
-            Output
+            Output,
         }
 
         IHardwareDeviceSession OpenDeviceSession(Direction direction, IVirtualMemoryManager memoryManager, SampleFormat sampleFormat, uint sampleRate, uint channelCount, float volume = 1f);
@@ -33,4 +33,4 @@ namespace Ryujinx.Audio.Integration
             return this;
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Integration/IHardwareDeviceSession.cs

@@ -25,4 +25,4 @@ namespace Ryujinx.Audio.Integration
 
         void PrepareToClose();
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Integration/IWritableEvent.cs

@@ -15,4 +15,4 @@ namespace Ryujinx.Audio.Integration
         /// </summary>
         void Clear();
     }
-}
+}

+ 10 - 5
src/Ryujinx.Audio/Output/AudioOutputManager.cs

@@ -24,7 +24,7 @@ namespace Ryujinx.Audio.Output
         /// <summary>
         /// The session ids allocation table.
         /// </summary>
-        private int[] _sessionIds;
+        private readonly int[] _sessionIds;
 
         /// <summary>
         /// The device driver.
@@ -39,7 +39,7 @@ namespace Ryujinx.Audio.Output
         /// <summary>
         /// The <see cref="AudioOutputSystem"/> session instances.
         /// </summary>
-        private AudioOutputSystem[] _sessions;
+        private readonly AudioOutputSystem[] _sessions;
 
         /// <summary>
         /// The count of active sessions.
@@ -165,10 +165,12 @@ namespace Ryujinx.Audio.Output
         /// Get the list of all audio outputs name.
         /// </summary>
         /// <returns>The list of all audio outputs name</returns>
+#pragma warning disable CA1822 // Mark member as static
         public string[] ListAudioOuts()
         {
-            return new string[] { Constants.DefaultDeviceOutputName };
+            return new[] { Constants.DefaultDeviceOutputName };
         }
+#pragma warning restore CA1822
 
         /// <summary>
         /// Open a new <see cref="AudioOutputSystem"/>.
@@ -182,6 +184,7 @@ namespace Ryujinx.Audio.Output
         /// <param name="parameter">The user configuration</param>
         /// <param name="appletResourceUserId">The applet resource user id of the application</param>
         /// <param name="processHandle">The process handle of the application</param>
+        /// <param name="volume">The volume level to request</param>
         /// <returns>A <see cref="ResultCode"/> reporting an error or a success</returns>
         public ResultCode OpenAudioOut(out string outputDeviceName,
                                        out AudioOutputConfiguration outputConfiguration,
@@ -200,7 +203,7 @@ namespace Ryujinx.Audio.Output
 
             IHardwareDeviceSession deviceSession = _deviceDriver.OpenDeviceSession(IHardwareDeviceDriver.Direction.Output, memoryManager, sampleFormat, parameter.SampleRate, parameter.ChannelCount, volume);
 
-            AudioOutputSystem audioOut = new AudioOutputSystem(this, _lock, deviceSession, _sessionsBufferEvents[sessionId]);
+            AudioOutputSystem audioOut = new(this, _lock, deviceSession, _sessionsBufferEvents[sessionId]);
 
             ResultCode result = audioOut.Initialize(inputDeviceName, sampleFormat, ref parameter, sessionId);
 
@@ -268,6 +271,8 @@ namespace Ryujinx.Audio.Output
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
+
             if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
             {
                 Dispose(true);
@@ -293,4 +298,4 @@ namespace Ryujinx.Audio.Output
             }
         }
     }
-}
+}

+ 11 - 7
src/Ryujinx.Audio/Output/AudioOutputSystem.cs

@@ -18,7 +18,7 @@ namespace Ryujinx.Audio.Output
         /// <summary>
         /// The session the <see cref="AudioOutputSystem"/>.
         /// </summary>
-        private AudioDeviceSession _session;
+        private readonly AudioDeviceSession _session;
 
         /// <summary>
         /// The target device name of the <see cref="AudioOutputSystem"/>.
@@ -43,7 +43,7 @@ namespace Ryujinx.Audio.Output
         /// <summary>
         /// The <see cref="AudioOutputManager"/> owning this.
         /// </summary>
-        private AudioOutputManager _manager;
+        private readonly AudioOutputManager _manager;
 
         /// <summary>
         /// THe lock of the parent.
@@ -90,11 +90,13 @@ namespace Ryujinx.Audio.Output
             {
                 return ResultCode.DeviceNotFound;
             }
-            else if (configuration.SampleRate != 0 && configuration.SampleRate != Constants.TargetSampleRate)
+
+            if (configuration.SampleRate != 0 && configuration.SampleRate != Constants.TargetSampleRate)
             {
                 return ResultCode.UnsupportedSampleRate;
             }
-            else if (configuration.ChannelCount != 0 && configuration.ChannelCount != 1 && configuration.ChannelCount != 2 && configuration.ChannelCount != 6)
+
+            if (configuration.ChannelCount != 0 && configuration.ChannelCount != 1 && configuration.ChannelCount != 2 && configuration.ChannelCount != 6)
             {
                 return ResultCode.UnsupportedChannelConfiguration;
             }
@@ -185,11 +187,11 @@ namespace Ryujinx.Audio.Output
         {
             lock (_parentLock)
             {
-                AudioBuffer buffer = new AudioBuffer
+                AudioBuffer buffer = new()
                 {
                     BufferTag = bufferTag,
                     DataPointer = userBuffer.Data,
-                    DataSize = userBuffer.DataSize
+                    DataSize = userBuffer.DataSize,
                 };
 
                 if (_session.AppendBuffer(buffer))
@@ -346,6 +348,8 @@ namespace Ryujinx.Audio.Output
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
+
             if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
             {
                 Dispose(true);
@@ -362,4 +366,4 @@ namespace Ryujinx.Audio.Output
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Common/AuxiliaryBufferAddresses.cs

@@ -10,4 +10,4 @@ namespace Ryujinx.Audio.Renderer.Common
         public ulong ReturnBufferInfo;
         public ulong ReturnBufferInfoBase;
     }
-}
+}

+ 3 - 3
src/Ryujinx.Audio/Renderer/Common/BehaviourParameter.cs

@@ -16,7 +16,7 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// Reserved/padding.
         /// </summary>
-        private uint _padding;
+        private readonly uint _padding;
 
         /// <summary>
         /// The flags given controlling behaviour of the audio renderer
@@ -38,7 +38,7 @@ namespace Ryujinx.Audio.Renderer.Common
             /// <summary>
             /// Reserved/padding.
             /// </summary>
-            private uint _padding;
+            private readonly uint _padding;
 
             /// <summary>
             /// Extra information given with the <see cref="ResultCode"/>
@@ -47,4 +47,4 @@ namespace Ryujinx.Audio.Renderer.Common
             public ulong ExtraErrorInfo;
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Common/EdgeMatrix.cs

@@ -147,4 +147,4 @@ namespace Ryujinx.Audio.Renderer.Common
             return _nodeCount;
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Common/EffectType.cs

@@ -55,4 +55,4 @@ namespace Ryujinx.Audio.Renderer.Common
         /// </summary>
         Compressor,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/MemoryPoolUserState.cs

@@ -38,6 +38,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// The memory pool is released. (client side only)
         /// </summary>
-        Released = 6
+        Released = 6,
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Common/NodeIdHelper.cs

@@ -25,4 +25,4 @@ namespace Ryujinx.Audio.Renderer.Common
             return (nodeId >> 16) & 0xFFF;
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/NodeIdType.cs

@@ -28,6 +28,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// Performance monitoring related node id (performance commands)
         /// </summary>
-        Performance = 15
+        Performance = 15,
     }
-}
+}

+ 13 - 12
src/Ryujinx.Audio/Renderer/Common/NodeStates.cs

@@ -53,17 +53,17 @@ namespace Ryujinx.Audio.Renderer.Common
         }
 
         private int _nodeCount;
-        private EdgeMatrix _discovered;
-        private EdgeMatrix _finished;
+        private readonly EdgeMatrix _discovered;
+        private readonly EdgeMatrix _finished;
         private Memory<int> _resultArray;
-        private Stack _stack;
+        private readonly Stack _stack;
         private int _tsortResultIndex;
 
         private enum NodeState : byte
         {
             Unknown,
             Discovered,
-            Finished
+            Finished,
         }
 
         public NodeStates()
@@ -88,16 +88,16 @@ namespace Ryujinx.Audio.Renderer.Common
 
             int edgeMatrixWorkBufferSize = EdgeMatrix.GetWorkBufferSize(nodeCount);
 
-            _discovered.Initialize(nodeStatesWorkBuffer.Slice(0, edgeMatrixWorkBufferSize), nodeCount);
+            _discovered.Initialize(nodeStatesWorkBuffer[..edgeMatrixWorkBufferSize], nodeCount);
             _finished.Initialize(nodeStatesWorkBuffer.Slice(edgeMatrixWorkBufferSize, edgeMatrixWorkBufferSize), nodeCount);
 
-            nodeStatesWorkBuffer = nodeStatesWorkBuffer.Slice(edgeMatrixWorkBufferSize * 2);
+            nodeStatesWorkBuffer = nodeStatesWorkBuffer[(edgeMatrixWorkBufferSize * 2)..];
 
-            _resultArray = SpanMemoryManager<int>.Cast(nodeStatesWorkBuffer.Slice(0, sizeof(int) * nodeCount));
+            _resultArray = SpanMemoryManager<int>.Cast(nodeStatesWorkBuffer[..(sizeof(int) * nodeCount)]);
 
-            nodeStatesWorkBuffer = nodeStatesWorkBuffer.Slice(sizeof(int) * nodeCount);
+            nodeStatesWorkBuffer = nodeStatesWorkBuffer[(sizeof(int) * nodeCount)..];
 
-            Memory<int> stackWorkBuffer = SpanMemoryManager<int>.Cast(nodeStatesWorkBuffer.Slice(0, Stack.CalcBufferSize(nodeCount * nodeCount)));
+            Memory<int> stackWorkBuffer = SpanMemoryManager<int>.Cast(nodeStatesWorkBuffer[..Stack.CalcBufferSize(nodeCount * nodeCount)]);
 
             _stack.Reset(stackWorkBuffer, nodeCount * nodeCount);
         }
@@ -120,7 +120,8 @@ namespace Ryujinx.Audio.Renderer.Common
 
                 return NodeState.Discovered;
             }
-            else if (_finished.Test(index))
+
+            if (_finished.Test(index))
             {
                 Debug.Assert(!_discovered.Test(index));
 
@@ -158,7 +159,7 @@ namespace Ryujinx.Audio.Renderer.Common
 
         public ReadOnlySpan<int> GetTsortResult()
         {
-            return _resultArray.Span.Slice(0, _tsortResultIndex);
+            return _resultArray.Span[.._tsortResultIndex];
         }
 
         public bool Sort(EdgeMatrix edgeMatrix)
@@ -226,4 +227,4 @@ namespace Ryujinx.Audio.Renderer.Common
             return true;
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/PerformanceDetailType.cs

@@ -15,6 +15,6 @@ namespace Ryujinx.Audio.Renderer.Common
         PcmFloat,
         Limiter,
         CaptureBuffer,
-        Compressor
+        Compressor,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/PerformanceEntryType.cs

@@ -6,6 +6,6 @@ namespace Ryujinx.Audio.Renderer.Common
         Voice,
         SubMix,
         FinalMix,
-        Sink
+        Sink,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/PlayState.cs

@@ -18,6 +18,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// The user request the voice to be paused.
         /// </summary>
-        Pause
+        Pause,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/ReverbEarlyMode.cs

@@ -28,6 +28,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// No early reflection.
         /// </summary>
-        Disabled
+        Disabled,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/ReverbLateMode.cs

@@ -33,6 +33,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// Max delay. (used for delay line limits)
         /// </summary>
-        Limit = NoDelay
+        Limit = NoDelay,
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Common/SinkType.cs

@@ -18,6 +18,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// The sink is a circular buffer.
         /// </summary>
-        CircularBuffer
+        CircularBuffer,
     }
-}
+}

+ 5 - 2
src/Ryujinx.Audio/Renderer/Common/UpdateDataHeader.cs

@@ -1,3 +1,4 @@
+using Ryujinx.Common.Memory;
 using System.Runtime.CompilerServices;
 
 namespace Ryujinx.Audio.Renderer.Common
@@ -19,7 +20,9 @@ namespace Ryujinx.Audio.Renderer.Common
         public uint Unknown24;
         public uint RenderInfoSize;
 
-        private unsafe fixed int _reserved[4];
+#pragma warning disable IDE0051, CS0169 // Remove unused field
+        private Array4<int> _reserved;
+#pragma warning restore IDE0051, CS0169
 
         public uint TotalSize;
 
@@ -30,4 +33,4 @@ namespace Ryujinx.Audio.Renderer.Common
             TotalSize = (uint)Unsafe.SizeOf<UpdateDataHeader>();
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Common/VoiceUpdateState.cs

@@ -101,4 +101,4 @@ namespace Ryujinx.Audio.Renderer.Common
             }
         }
     }
-}
+}

+ 2 - 3
src/Ryujinx.Audio/Renderer/Common/WaveBuffer.cs

@@ -1,5 +1,4 @@
 using System.Runtime.InteropServices;
-
 using DspAddr = System.UInt64;
 
 namespace Ryujinx.Audio.Renderer.Common
@@ -77,6 +76,6 @@ namespace Ryujinx.Audio.Renderer.Common
         /// <summary>
         /// Padding/Reserved.
         /// </summary>
-        private ushort _padding;
+        private readonly ushort _padding;
     }
-}
+}

+ 4 - 4
src/Ryujinx.Audio/Renderer/Common/WorkBufferAllocator.cs

@@ -23,7 +23,7 @@ namespace Ryujinx.Audio.Renderer.Common
 
             if (size != 0)
             {
-                ulong alignedOffset = BitUtils.AlignUp<ulong>(Offset, (ulong)align);
+                ulong alignedOffset = BitUtils.AlignUp(Offset, (ulong)align);
 
                 if (alignedOffset + size <= (ulong)BackingMemory.Length)
                 {
@@ -32,7 +32,7 @@ namespace Ryujinx.Audio.Renderer.Common
                     Offset = alignedOffset + size;
 
                     // Clear the memory to be sure that is does not contain any garbage.
-                    result.Span.Fill(0);
+                    result.Span.Clear();
 
                     return result;
                 }
@@ -55,7 +55,7 @@ namespace Ryujinx.Audio.Renderer.Common
 
         public static ulong GetTargetSize<T>(ulong currentSize, ulong count, int align) where T : unmanaged
         {
-            return BitUtils.AlignUp<ulong>(currentSize, (ulong)align) + (ulong)Unsafe.SizeOf<T>() * count;
+            return BitUtils.AlignUp(currentSize, (ulong)align) + (ulong)Unsafe.SizeOf<T>() * count;
         }
     }
-}
+}

+ 6 - 6
src/Ryujinx.Audio/Renderer/Device/VirtualDevice.cs

@@ -12,11 +12,11 @@ namespace Ryujinx.Audio.Renderer.Device
         /// </summary>
         public static readonly VirtualDevice[] Devices = new VirtualDevice[5]
         {
-            new VirtualDevice("AudioStereoJackOutput", 2, true),
-            new VirtualDevice("AudioBuiltInSpeakerOutput", 2, false),
-            new VirtualDevice("AudioTvOutput", 6, false),
-            new VirtualDevice("AudioUsbDeviceOutput", 2, true),
-            new VirtualDevice("AudioExternalOutput", 6, true),
+            new("AudioStereoJackOutput", 2, true),
+            new("AudioBuiltInSpeakerOutput", 2, false),
+            new("AudioTvOutput", 6, false),
+            new("AudioUsbDeviceOutput", 2, true),
+            new("AudioExternalOutput", 6, true),
         };
 
         /// <summary>
@@ -86,4 +86,4 @@ namespace Ryujinx.Audio.Renderer.Device
             return Name;
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Device/VirtualDeviceSession.cs

@@ -24,4 +24,4 @@ namespace Ryujinx.Audio.Renderer.Device
             Device = virtualDevice;
         }
     }
-}
+}

+ 4 - 2
src/Ryujinx.Audio/Renderer/Device/VirtualDeviceSessionRegistry.cs

@@ -11,13 +11,15 @@ namespace Ryujinx.Audio.Renderer.Device
         /// <summary>
         /// The session registry, used to store the sessions of a given AppletResourceId.
         /// </summary>
-        private Dictionary<ulong, VirtualDeviceSession[]> _sessionsRegistry = new Dictionary<ulong, VirtualDeviceSession[]>();
+        private readonly Dictionary<ulong, VirtualDeviceSession[]> _sessionsRegistry = new();
 
         /// <summary>
         /// The default <see cref="VirtualDevice"/>.
         /// </summary>
         /// <remarks>This is used when the USB device is the default one on older revision.</remarks>
+#pragma warning disable CA1822 // Mark member as static
         public VirtualDevice DefaultDevice => VirtualDevice.Devices[0];
+#pragma warning restore CA1822
 
         /// <summary>
         /// The current active <see cref="VirtualDevice"/>.
@@ -76,4 +78,4 @@ namespace Ryujinx.Audio.Renderer.Device
             return virtualDeviceSession;
         }
     }
-}
+}

+ 8 - 2
src/Ryujinx.Audio/Renderer/Dsp/AdpcmHelper.cs

@@ -12,7 +12,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
         private const int SamplesPerFrame = 14;
         private const int NibblesPerFrame = SamplesPerFrame + 2;
         private const int BytesPerFrame = 8;
+#pragma warning disable IDE0051 // Remove unused private member
         private const int BitsPerFrame = BytesPerFrame * 8;
+#pragma warning restore IDE0051
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public static uint GetAdpcmDataSize(int sampleCount)
@@ -64,10 +66,14 @@ namespace Ryujinx.Audio.Renderer.Dsp
         private static short Saturate(int value)
         {
             if (value > short.MaxValue)
+            {
                 value = short.MaxValue;
+            }
 
             if (value < short.MinValue)
+            {
                 value = short.MinValue;
+            }
 
             return (short)value;
         }
@@ -109,7 +115,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
 
             ReadOnlySpan<byte> targetInput;
 
-            targetInput = input.Slice(nibbles / 2);
+            targetInput = input[(nibbles / 2)..];
 
             while (remaining > 0)
             {
@@ -213,4 +219,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             return decodedCount;
         }
     }
-}
+}

+ 11 - 10
src/Ryujinx.Audio/Renderer/Dsp/AudioProcessor.cs

@@ -18,7 +18,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
             Start,
             Stop,
             RenderStart,
-            RenderEnd
+            RenderEnd,
         }
 
         private class RendererSession
@@ -36,7 +36,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
 
         private long _lastTime;
         private long _playbackEnds;
-        private ManualResetEvent _event;
+        private readonly ManualResetEvent _event;
 
         private ManualResetEvent _pauseEvent;
 
@@ -45,6 +45,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
             _event = new ManualResetEvent(false);
         }
 
+#pragma warning disable IDE0051 // Remove unused private member
         private static uint GetHardwareChannelCount(IHardwareDeviceDriver deviceDriver)
         {
             // Get the real device driver (In case the compat layer is on top of it).
@@ -54,12 +55,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
             {
                 return 6;
             }
-            else
-            {
-                // NOTE: We default to stereo as this will get downmixed to mono by the compat layer if it's not compatible.
-                return 2;
-            }
+
+            // NOTE: We default to stereo as this will get downmixed to mono by the compat layer if it's not compatible.
+            return 2;
         }
+#pragma warning restore IDE0051
 
         public void Start(IHardwareDeviceDriver deviceDriver, float volume)
         {
@@ -110,7 +110,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
             {
                 CommandList = commands,
                 RenderingLimit = renderingLimit,
-                AppletResourceId = appletResourceId
+                AppletResourceId = appletResourceId,
             };
         }
 
@@ -171,7 +171,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
         {
             _workerThread = new Thread(Work)
             {
-                Name = "AudioProcessor.Worker"
+                Name = "AudioProcessor.Worker",
             };
 
             _workerThread.Start();
@@ -260,6 +260,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
 
@@ -271,4 +272,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/BiquadFilterHelper.cs

@@ -80,4 +80,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             }
         }
     }
-}
+}

+ 5 - 3
src/Ryujinx.Audio/Renderer/Dsp/Command/AdpcmDataSourceCommandVersion1.cs

@@ -1,7 +1,9 @@
 using Ryujinx.Audio.Common;
 using Ryujinx.Audio.Renderer.Common;
+using Ryujinx.Audio.Renderer.Server.Voice;
 using System;
 using static Ryujinx.Audio.Renderer.Parameter.VoiceInParameter;
+using WaveBuffer = Ryujinx.Audio.Renderer.Common.WaveBuffer;
 
 namespace Ryujinx.Audio.Renderer.Dsp.Command
 {
@@ -29,7 +31,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
         public DecodingBehaviour DecodingBehaviour { get; }
 
-        public AdpcmDataSourceCommandVersion1(ref Server.Voice.VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, int nodeId)
+        public AdpcmDataSourceCommandVersion1(ref VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, int nodeId)
         {
             Enabled = true;
             NodeId = nodeId;
@@ -57,7 +59,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         {
             Span<float> outputBuffer = context.GetBuffer(OutputBufferIndex);
 
-            DataSourceHelper.WaveBufferInformation info = new DataSourceHelper.WaveBufferInformation
+            DataSourceHelper.WaveBufferInformation info = new()
             {
                 SourceSampleRate = SampleRate,
                 SampleFormat = SampleFormat.Adpcm,
@@ -72,4 +74,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             DataSourceHelper.ProcessWaveBuffers(context.MemoryManager, outputBuffer, ref info, WaveBuffers, ref State.Span[0], context.SampleRate, (int)context.SampleCount);
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Dsp/Command/AuxiliaryBufferCommand.cs

@@ -155,7 +155,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
                 if (readResult != context.SampleCount)
                 {
-                    outputBuffer.Slice((int)readResult, (int)context.SampleCount - (int)readResult).Fill(0);
+                    outputBuffer[(int)readResult..(int)context.SampleCount].Clear();
                 }
             }
             else
@@ -170,4 +170,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/BiquadFilterCommand.cs

@@ -48,4 +48,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             BiquadFilterHelper.ProcessBiquadFilter(ref _parameter, ref state, outputBuffer, inputBuffer, context.SampleCount);
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/CaptureBufferCommand.cs

@@ -133,4 +133,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/ClearMixBufferCommand.cs

@@ -21,4 +21,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             context.ClearBuffers();
         }
     }
-}
+}

+ 3 - 2
src/Ryujinx.Audio/Renderer/Dsp/Command/CommandList.cs

@@ -71,7 +71,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                 return (IntPtr)((float*)_buffersMemoryHandle.Pointer + index * _sampleCount);
             }
 
-            throw new ArgumentOutOfRangeException();
+            throw new ArgumentOutOfRangeException(nameof(index), index, null);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -149,7 +149,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             _buffersMemoryHandle.Dispose();
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Dsp/Command/CommandType.cs

@@ -32,6 +32,6 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         LimiterVersion2,
         GroupedBiquadFilter,
         CaptureBuffer,
-        Compressor
+        Compressor,
     }
-}
+}

+ 3 - 2
src/Ryujinx.Audio/Renderer/Dsp/Command/CompressorCommand.cs

@@ -1,6 +1,7 @@
 using Ryujinx.Audio.Renderer.Dsp.Effect;
 using Ryujinx.Audio.Renderer.Dsp.State;
 using Ryujinx.Audio.Renderer.Parameter.Effect;
+using Ryujinx.Audio.Renderer.Server.Effect;
 using System;
 using System.Diagnostics;
 
@@ -51,11 +52,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             if (IsEffectEnabled)
             {
-                if (_parameter.Status == Server.Effect.UsageState.Invalid)
+                if (_parameter.Status == UsageState.Invalid)
                 {
                     state = new CompressorState(ref _parameter);
                 }
-                else if (_parameter.Status == Server.Effect.UsageState.New)
+                else if (_parameter.Status == UsageState.New)
                 {
                     state.UpdateParameter(ref _parameter);
                 }

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/CopyMixBufferCommand.cs

@@ -27,4 +27,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             context.CopyBuffer(OutputBufferIndex, InputBufferIndex);
         }
     }
-}
+}

+ 12 - 14
src/Ryujinx.Audio/Renderer/Dsp/Command/DataSourceVersion2Command.cs

@@ -1,7 +1,9 @@
 using Ryujinx.Audio.Common;
 using Ryujinx.Audio.Renderer.Common;
+using Ryujinx.Audio.Renderer.Server.Voice;
 using System;
 using static Ryujinx.Audio.Renderer.Parameter.VoiceInParameter;
+using WaveBuffer = Ryujinx.Audio.Renderer.Common.WaveBuffer;
 
 namespace Ryujinx.Audio.Renderer.Dsp.Command
 {
@@ -37,7 +39,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
         public SampleRateConversionQuality SrcQuality { get; }
 
-        public DataSourceVersion2Command(ref Server.Voice.VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, ushort channelIndex, int nodeId)
+        public DataSourceVersion2Command(ref VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, ushort channelIndex, int nodeId)
         {
             Enabled = true;
             NodeId = nodeId;
@@ -72,24 +74,20 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
         private static CommandType GetCommandTypeBySampleFormat(SampleFormat sampleFormat)
         {
-            switch (sampleFormat)
+            return sampleFormat switch
             {
-                case SampleFormat.Adpcm:
-                    return CommandType.AdpcmDataSourceVersion2;
-                case SampleFormat.PcmInt16:
-                    return CommandType.PcmInt16DataSourceVersion2;
-                case SampleFormat.PcmFloat:
-                    return CommandType.PcmFloatDataSourceVersion2;
-                default:
-                    throw new NotImplementedException($"{sampleFormat}");
-            }
+                SampleFormat.Adpcm => CommandType.AdpcmDataSourceVersion2,
+                SampleFormat.PcmInt16 => CommandType.PcmInt16DataSourceVersion2,
+                SampleFormat.PcmFloat => CommandType.PcmFloatDataSourceVersion2,
+                _ => throw new NotImplementedException($"{sampleFormat}"),
+            };
         }
 
         public void Process(CommandList context)
         {
             Span<float> outputBuffer = context.GetBuffer(OutputBufferIndex);
 
-            DataSourceHelper.WaveBufferInformation info = new DataSourceHelper.WaveBufferInformation
+            DataSourceHelper.WaveBufferInformation info = new()
             {
                 SourceSampleRate = SampleRate,
                 SampleFormat = SampleFormat,
@@ -99,10 +97,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                 ExtraParameterSize = ExtraParameterSize,
                 ChannelIndex = (int)ChannelIndex,
                 ChannelCount = (int)ChannelCount,
-                SrcQuality = SrcQuality
+                SrcQuality = SrcQuality,
             };
 
             DataSourceHelper.ProcessWaveBuffers(context.MemoryManager, outputBuffer, ref info, WaveBuffers, ref State.Span[0], context.SampleRate, (int)context.SampleCount);
         }
     }
-}
+}

+ 13 - 13
src/Ryujinx.Audio/Renderer/Dsp/Command/DelayCommand.cs

@@ -87,18 +87,18 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             float dryGain = FixedPointHelper.ToFloat(Parameter.DryGain, FixedPointPrecision);
             float outGain = FixedPointHelper.ToFloat(Parameter.OutGain, FixedPointPrecision);
 
-            Matrix2x2 delayFeedback = new Matrix2x2(delayFeedbackBaseGain, delayFeedbackCrossGain,
+            Matrix2x2 delayFeedback = new(delayFeedbackBaseGain, delayFeedbackCrossGain,
                                                     delayFeedbackCrossGain, delayFeedbackBaseGain);
 
             for (int i = 0; i < sampleCount; i++)
             {
-                Vector2 channelInput = new Vector2
+                Vector2 channelInput = new()
                 {
                     X = *((float*)inputBuffers[0] + i) * 64,
                     Y = *((float*)inputBuffers[1] + i) * 64,
                 };
 
-                Vector2 delayLineValues = new Vector2()
+                Vector2 delayLineValues = new()
                 {
                     X = state.DelayLines[0].Read(),
                     Y = state.DelayLines[1].Read(),
@@ -124,7 +124,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             float dryGain = FixedPointHelper.ToFloat(Parameter.DryGain, FixedPointPrecision);
             float outGain = FixedPointHelper.ToFloat(Parameter.OutGain, FixedPointPrecision);
 
-            Matrix4x4 delayFeedback = new Matrix4x4(delayFeedbackBaseGain, delayFeedbackCrossGain, delayFeedbackCrossGain, 0.0f,
+            Matrix4x4 delayFeedback = new(delayFeedbackBaseGain, delayFeedbackCrossGain, delayFeedbackCrossGain, 0.0f,
                                                     delayFeedbackCrossGain, delayFeedbackBaseGain, 0.0f, delayFeedbackCrossGain,
                                                     delayFeedbackCrossGain, 0.0f, delayFeedbackBaseGain, delayFeedbackCrossGain,
                                                     0.0f, delayFeedbackCrossGain, delayFeedbackCrossGain, delayFeedbackBaseGain);
@@ -132,20 +132,20 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             for (int i = 0; i < sampleCount; i++)
             {
-                Vector4 channelInput = new Vector4
+                Vector4 channelInput = new()
                 {
                     X = *((float*)inputBuffers[0] + i) * 64,
                     Y = *((float*)inputBuffers[1] + i) * 64,
                     Z = *((float*)inputBuffers[2] + i) * 64,
-                    W = *((float*)inputBuffers[3] + i) * 64
+                    W = *((float*)inputBuffers[3] + i) * 64,
                 };
 
-                Vector4 delayLineValues = new Vector4()
+                Vector4 delayLineValues = new()
                 {
                     X = state.DelayLines[0].Read(),
                     Y = state.DelayLines[1].Read(),
                     Z = state.DelayLines[2].Read(),
-                    W = state.DelayLines[3].Read()
+                    W = state.DelayLines[3].Read(),
                 };
 
                 Vector4 temp = MatrixHelper.Transform(ref delayLineValues, ref delayFeedback) + channelInput * inGain;
@@ -171,7 +171,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             float dryGain = FixedPointHelper.ToFloat(Parameter.DryGain, FixedPointPrecision);
             float outGain = FixedPointHelper.ToFloat(Parameter.OutGain, FixedPointPrecision);
 
-            Matrix6x6 delayFeedback = new Matrix6x6(delayFeedbackBaseGain, 0.0f, delayFeedbackCrossGain, 0.0f, delayFeedbackCrossGain, 0.0f,
+            Matrix6x6 delayFeedback = new(delayFeedbackBaseGain, 0.0f, delayFeedbackCrossGain, 0.0f, delayFeedbackCrossGain, 0.0f,
                                                     0.0f, delayFeedbackBaseGain, delayFeedbackCrossGain, 0.0f, 0.0f, delayFeedbackCrossGain,
                                                     delayFeedbackCrossGain, delayFeedbackCrossGain, delayFeedbackBaseGain, 0.0f, 0.0f, 0.0f,
                                                     0.0f, 0.0f, 0.0f, feedbackGain, 0.0f, 0.0f,
@@ -180,24 +180,24 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             for (int i = 0; i < sampleCount; i++)
             {
-                Vector6 channelInput = new Vector6
+                Vector6 channelInput = new()
                 {
                     X = *((float*)inputBuffers[0] + i) * 64,
                     Y = *((float*)inputBuffers[1] + i) * 64,
                     Z = *((float*)inputBuffers[2] + i) * 64,
                     W = *((float*)inputBuffers[3] + i) * 64,
                     V = *((float*)inputBuffers[4] + i) * 64,
-                    U = *((float*)inputBuffers[5] + i) * 64
+                    U = *((float*)inputBuffers[5] + i) * 64,
                 };
 
-                Vector6 delayLineValues = new Vector6
+                Vector6 delayLineValues = new()
                 {
                     X = state.DelayLines[0].Read(),
                     Y = state.DelayLines[1].Read(),
                     Z = state.DelayLines[2].Read(),
                     W = state.DelayLines[3].Read(),
                     V = state.DelayLines[4].Read(),
-                    U = state.DelayLines[5].Read()
+                    U = state.DelayLines[5].Read(),
                 };
 
                 Vector6 temp = MatrixHelper.Transform(ref delayLineValues, ref delayFeedback) + channelInput * inGain;

+ 7 - 9
src/Ryujinx.Audio/Renderer/Dsp/Command/DepopForMixBuffersCommand.cs

@@ -55,17 +55,15 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
                 return -depopValue;
             }
-            else
-            {
-                for (int i = 0; i < sampleCount; i++)
-                {
-                    depopValue = FloatingPointHelper.MultiplyRoundDown(Decay, depopValue);
 
-                    buffer[i] += depopValue;
-                }
+            for (int i = 0; i < sampleCount; i++)
+            {
+                depopValue = FloatingPointHelper.MultiplyRoundDown(Decay, depopValue);
 
-                return depopValue;
+                buffer[i] += depopValue;
             }
+
+            return depopValue;
         }
 
         public void Process(CommandList context)
@@ -89,4 +87,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/DepopPrepareCommand.cs

@@ -54,4 +54,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/DownMixSurroundToStereoCommand.cs

@@ -65,4 +65,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             context.ClearBuffer(OutputBufferIndices[5]);
         }
     }
-}
+}

+ 6 - 6
src/Ryujinx.Audio/Renderer/Dsp/Command/GroupedBiquadFilterCommand.cs

@@ -14,11 +14,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
         public uint EstimatedProcessingTime { get; set; }
 
-        private BiquadFilterParameter[] _parameters;
-        private Memory<BiquadFilterState> _biquadFilterStates;
-        private int _inputBufferIndex;
-        private int _outputBufferIndex;
-        private bool[] _isInitialized;
+        private readonly BiquadFilterParameter[] _parameters;
+        private readonly Memory<BiquadFilterState> _biquadFilterStates;
+        private readonly int _inputBufferIndex;
+        private readonly int _outputBufferIndex;
+        private readonly bool[] _isInitialized;
 
         public GroupedBiquadFilterCommand(int baseIndex, ReadOnlySpan<BiquadFilterParameter> filters, Memory<BiquadFilterState> biquadFilterStateMemory, int inputBufferOffset, int outputBufferOffset, ReadOnlySpan<bool> isInitialized, int nodeId)
         {
@@ -59,4 +59,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/ICommand.cs

@@ -17,4 +17,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             return false;
         }
     }
-}
+}

+ 5 - 4
src/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion1.cs

@@ -1,5 +1,6 @@
 using Ryujinx.Audio.Renderer.Dsp.State;
 using Ryujinx.Audio.Renderer.Parameter.Effect;
+using Ryujinx.Audio.Renderer.Server.Effect;
 using System;
 using System.Diagnostics;
 
@@ -50,13 +51,13 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             if (IsEffectEnabled)
             {
-                if (Parameter.Status == Server.Effect.UsageState.Invalid)
+                if (Parameter.Status == UsageState.Invalid)
                 {
                     state = new LimiterState(ref _parameter, WorkBuffer);
                 }
-                else if (Parameter.Status == Server.Effect.UsageState.New)
+                else if (Parameter.Status == UsageState.New)
                 {
-                    state.UpdateParameter(ref _parameter);
+                    LimiterState.UpdateParameter(ref _parameter);
                 }
             }
 
@@ -141,4 +142,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 5 - 4
src/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs

@@ -1,6 +1,7 @@
 using Ryujinx.Audio.Renderer.Dsp.State;
 using Ryujinx.Audio.Renderer.Parameter;
 using Ryujinx.Audio.Renderer.Parameter.Effect;
+using Ryujinx.Audio.Renderer.Server.Effect;
 using System;
 using System.Diagnostics;
 using System.Runtime.InteropServices;
@@ -54,13 +55,13 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             if (IsEffectEnabled)
             {
-                if (Parameter.Status == Server.Effect.UsageState.Invalid)
+                if (Parameter.Status == UsageState.Invalid)
                 {
                     state = new LimiterState(ref _parameter, WorkBuffer);
                 }
-                else if (Parameter.Status == Server.Effect.UsageState.New)
+                else if (Parameter.Status == UsageState.New)
                 {
-                    state.UpdateParameter(ref _parameter);
+                    LimiterState.UpdateParameter(ref _parameter);
                 }
             }
 
@@ -160,4 +161,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/MixCommand.cs

@@ -134,4 +134,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             ProcessMix(outputBuffer, inputBuffer);
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/MixRampCommand.cs

@@ -65,4 +65,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             State.Span[0].LastSamples[LastSampleIndex] = ProcessMixRamp(outputBuffer, inputBuffer, (int)context.SampleCount);
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Dsp/Command/MixRampGroupedCommand.cs

@@ -48,7 +48,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        private float ProcessMixRampGrouped(Span<float> outputBuffer, ReadOnlySpan<float> inputBuffer, float volume0, float volume1, int sampleCount)
+        private static float ProcessMixRampGrouped(Span<float> outputBuffer, ReadOnlySpan<float> inputBuffer, float volume0, float volume1, int sampleCount)
         {
             float ramp = (volume1 - volume0) / sampleCount;
             float volume = volume0;
@@ -88,4 +88,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 5 - 3
src/Ryujinx.Audio/Renderer/Dsp/Command/PcmFloatDataSourceCommandVersion1.cs

@@ -1,7 +1,9 @@
 using Ryujinx.Audio.Common;
 using Ryujinx.Audio.Renderer.Common;
+using Ryujinx.Audio.Renderer.Server.Voice;
 using System;
 using static Ryujinx.Audio.Renderer.Parameter.VoiceInParameter;
+using WaveBuffer = Ryujinx.Audio.Renderer.Common.WaveBuffer;
 
 namespace Ryujinx.Audio.Renderer.Dsp.Command
 {
@@ -28,7 +30,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         public Memory<VoiceUpdateState> State { get; }
         public DecodingBehaviour DecodingBehaviour { get; }
 
-        public PcmFloatDataSourceCommandVersion1(ref Server.Voice.VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, ushort channelIndex, int nodeId)
+        public PcmFloatDataSourceCommandVersion1(ref VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, ushort channelIndex, int nodeId)
         {
             Enabled = true;
             NodeId = nodeId;
@@ -56,7 +58,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         {
             Span<float> outputBuffer = context.GetBuffer(OutputBufferIndex);
 
-            DataSourceHelper.WaveBufferInformation info = new DataSourceHelper.WaveBufferInformation
+            DataSourceHelper.WaveBufferInformation info = new()
             {
                 SourceSampleRate = SampleRate,
                 SampleFormat = SampleFormat.PcmFloat,
@@ -71,4 +73,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             DataSourceHelper.ProcessWaveBuffers(context.MemoryManager, outputBuffer, ref info, WaveBuffers, ref State.Span[0], context.SampleRate, (int)context.SampleCount);
         }
     }
-}
+}

+ 5 - 3
src/Ryujinx.Audio/Renderer/Dsp/Command/PcmInt16DataSourceCommandVersion1.cs

@@ -1,7 +1,9 @@
 using Ryujinx.Audio.Common;
 using Ryujinx.Audio.Renderer.Common;
+using Ryujinx.Audio.Renderer.Server.Voice;
 using System;
 using static Ryujinx.Audio.Renderer.Parameter.VoiceInParameter;
+using WaveBuffer = Ryujinx.Audio.Renderer.Common.WaveBuffer;
 
 namespace Ryujinx.Audio.Renderer.Dsp.Command
 {
@@ -28,7 +30,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         public Memory<VoiceUpdateState> State { get; }
         public DecodingBehaviour DecodingBehaviour { get; }
 
-        public PcmInt16DataSourceCommandVersion1(ref Server.Voice.VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, ushort channelIndex, int nodeId)
+        public PcmInt16DataSourceCommandVersion1(ref VoiceState serverState, Memory<VoiceUpdateState> state, ushort outputBufferIndex, ushort channelIndex, int nodeId)
         {
             Enabled = true;
             NodeId = nodeId;
@@ -56,7 +58,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         {
             Span<float> outputBuffer = context.GetBuffer(OutputBufferIndex);
 
-            DataSourceHelper.WaveBufferInformation info = new DataSourceHelper.WaveBufferInformation
+            DataSourceHelper.WaveBufferInformation info = new()
             {
                 SourceSampleRate = SampleRate,
                 SampleFormat = SampleFormat.PcmInt16,
@@ -71,4 +73,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             DataSourceHelper.ProcessWaveBuffers(context.MemoryManager, outputBuffer, ref info, WaveBuffers, ref State.Span[0], context.SampleRate, (int)context.SampleCount);
         }
     }
-}
+}

+ 2 - 2
src/Ryujinx.Audio/Renderer/Dsp/Command/PerformanceCommand.cs

@@ -8,7 +8,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         {
             Invalid,
             Start,
-            End
+            End,
         }
 
         public bool Enabled { get; set; }
@@ -44,4 +44,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 17 - 17
src/Ryujinx.Audio/Renderer/Dsp/Command/Reverb3dCommand.cs

@@ -9,21 +9,21 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 {
     public class Reverb3dCommand : ICommand
     {
-        private static readonly int[] OutputEarlyIndicesTableMono = new int[20] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableMono = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableMono = new int[1] { 0 };
+        private static readonly int[] _outputEarlyIndicesTableMono = new int[20] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[1] { 0 };
 
-        private static readonly int[] OutputEarlyIndicesTableStereo = new int[20] { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableStereo = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableStereo = new int[2] { 0, 1 };
+        private static readonly int[] _outputEarlyIndicesTableStereo = new int[20] { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[2] { 0, 1 };
 
-        private static readonly int[] OutputEarlyIndicesTableQuadraphonic = new int[20] { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableQuadraphonic = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
+        private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[20] { 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3, 3, 3 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[20] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
 
-        private static readonly int[] OutputEarlyIndicesTableSurround = new int[40] { 4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableSurround = new int[40] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableSurround = new int[6] { 0, 1, 2, 3, -1, 3 };
+        private static readonly int[] _outputEarlyIndicesTableSurround = new int[40] { 4, 5, 0, 5, 0, 5, 1, 5, 1, 5, 1, 5, 1, 5, 2, 5, 2, 5, 2, 5, 1, 5, 1, 5, 1, 5, 0, 5, 0, 5, 0, 5, 0, 5, 3, 5, 3, 5, 3, 5 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[40] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[6] { 0, 1, 2, 3, -1, 3 };
 
         public bool Enabled { get; set; }
 
@@ -73,25 +73,25 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void ProcessReverb3dMono(ref Reverb3dState state, ReadOnlySpan<IntPtr> outputBuffers, ReadOnlySpan<IntPtr> inputBuffers, uint sampleCount)
         {
-            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, OutputEarlyIndicesTableMono, TargetEarlyDelayLineIndicesTableMono, TargetOutputFeedbackIndicesTableMono);
+            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, _outputEarlyIndicesTableMono, _targetEarlyDelayLineIndicesTableMono, _targetOutputFeedbackIndicesTableMono);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void ProcessReverb3dStereo(ref Reverb3dState state, ReadOnlySpan<IntPtr> outputBuffers, ReadOnlySpan<IntPtr> inputBuffers, uint sampleCount)
         {
-            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, OutputEarlyIndicesTableStereo, TargetEarlyDelayLineIndicesTableStereo, TargetOutputFeedbackIndicesTableStereo);
+            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, _outputEarlyIndicesTableStereo, _targetEarlyDelayLineIndicesTableStereo, _targetOutputFeedbackIndicesTableStereo);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void ProcessReverb3dQuadraphonic(ref Reverb3dState state, ReadOnlySpan<IntPtr> outputBuffers, ReadOnlySpan<IntPtr> inputBuffers, uint sampleCount)
         {
-            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, OutputEarlyIndicesTableQuadraphonic, TargetEarlyDelayLineIndicesTableQuadraphonic, TargetOutputFeedbackIndicesTableQuadraphonic);
+            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, _outputEarlyIndicesTableQuadraphonic, _targetEarlyDelayLineIndicesTableQuadraphonic, _targetOutputFeedbackIndicesTableQuadraphonic);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         private void ProcessReverb3dSurround(ref Reverb3dState state, ReadOnlySpan<IntPtr> outputBuffers, ReadOnlySpan<IntPtr> inputBuffers, uint sampleCount)
         {
-            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, OutputEarlyIndicesTableSurround, TargetEarlyDelayLineIndicesTableSurround, TargetOutputFeedbackIndicesTableSurround);
+            ProcessReverb3dGeneric(ref state, outputBuffers, inputBuffers, sampleCount, _outputEarlyIndicesTableSurround, _targetEarlyDelayLineIndicesTableSurround, _targetOutputFeedbackIndicesTableSurround);
         }
 
         private unsafe void ProcessReverb3dGeneric(ref Reverb3dState state, ReadOnlySpan<IntPtr> outputBuffers, ReadOnlySpan<IntPtr> inputBuffers, uint sampleCount, ReadOnlySpan<int> outputEarlyIndicesTable, ReadOnlySpan<int> targetEarlyDelayLineIndicesTable, ReadOnlySpan<int> targetOutputFeedbackIndicesTable)
@@ -109,7 +109,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             for (int sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++)
             {
-                outputValues.Fill(0);
+                outputValues.Clear();
 
                 float tapOut = state.PreDelayLine.TapUnsafe(state.ReflectionDelayTime, DelayLineSampleIndexOffset);
 

+ 40 - 39
src/Ryujinx.Audio/Renderer/Dsp/Command/ReverbCommand.cs

@@ -1,5 +1,6 @@
 using Ryujinx.Audio.Renderer.Dsp.State;
 using Ryujinx.Audio.Renderer.Parameter.Effect;
+using Ryujinx.Audio.Renderer.Server.Effect;
 using System;
 using System.Diagnostics;
 using System.Runtime.CompilerServices;
@@ -8,25 +9,25 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 {
     public class ReverbCommand : ICommand
     {
-        private static readonly int[] OutputEarlyIndicesTableMono = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableMono = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-        private static readonly int[] OutputIndicesTableMono = new int[4] { 0, 0, 0, 0 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableMono = new int[4] { 0, 1, 2, 3 };
-
-        private static readonly int[] OutputEarlyIndicesTableStereo = new int[10] { 0, 0, 1, 1, 0, 1, 0, 0, 1, 1 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableStereo = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-        private static readonly int[] OutputIndicesTableStereo = new int[4] { 0, 0, 1, 1 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableStereo = new int[4] { 2, 0, 3, 1 };
-
-        private static readonly int[] OutputEarlyIndicesTableQuadraphonic = new int[10] { 0, 0, 1, 1, 0, 1, 2, 2, 3, 3 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableQuadraphonic = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-        private static readonly int[] OutputIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
-
-        private static readonly int[] OutputEarlyIndicesTableSurround = new int[20] { 0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5 };
-        private static readonly int[] TargetEarlyDelayLineIndicesTableSurround = new int[20] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 };
-        private static readonly int[] OutputIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, 4, 5 };
-        private static readonly int[] TargetOutputFeedbackIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, -1, 3 };
+        private static readonly int[] _outputEarlyIndicesTableMono = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableMono = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+        private static readonly int[] _outputIndicesTableMono = new int[4] { 0, 0, 0, 0 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableMono = new int[4] { 0, 1, 2, 3 };
+
+        private static readonly int[] _outputEarlyIndicesTableStereo = new int[10] { 0, 0, 1, 1, 0, 1, 0, 0, 1, 1 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableStereo = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+        private static readonly int[] _outputIndicesTableStereo = new int[4] { 0, 0, 1, 1 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableStereo = new int[4] { 2, 0, 3, 1 };
+
+        private static readonly int[] _outputEarlyIndicesTableQuadraphonic = new int[10] { 0, 0, 1, 1, 0, 1, 2, 2, 3, 3 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableQuadraphonic = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+        private static readonly int[] _outputIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableQuadraphonic = new int[4] { 0, 1, 2, 3 };
+
+        private static readonly int[] _outputEarlyIndicesTableSurround = new int[20] { 0, 5, 0, 5, 1, 5, 1, 5, 4, 5, 4, 5, 2, 5, 2, 5, 3, 5, 3, 5 };
+        private static readonly int[] _targetEarlyDelayLineIndicesTableSurround = new int[20] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9 };
+        private static readonly int[] _outputIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, 4, 5 };
+        private static readonly int[] _targetOutputFeedbackIndicesTableSurround = new int[Constants.ChannelCountMax] { 0, 1, 2, 3, -1, 3 };
 
         public bool Enabled { get; set; }
 
@@ -82,10 +83,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                      outputBuffers,
                      inputBuffers,
                      sampleCount,
-                     OutputEarlyIndicesTableMono,
-                     TargetEarlyDelayLineIndicesTableMono,
-                     TargetOutputFeedbackIndicesTableMono,
-                     OutputIndicesTableMono);
+                     _outputEarlyIndicesTableMono,
+                     _targetEarlyDelayLineIndicesTableMono,
+                     _targetOutputFeedbackIndicesTableMono,
+                     _outputIndicesTableMono);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -95,10 +96,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                      outputBuffers,
                      inputBuffers,
                      sampleCount,
-                     OutputEarlyIndicesTableStereo,
-                     TargetEarlyDelayLineIndicesTableStereo,
-                     TargetOutputFeedbackIndicesTableStereo,
-                     OutputIndicesTableStereo);
+                     _outputEarlyIndicesTableStereo,
+                     _targetEarlyDelayLineIndicesTableStereo,
+                     _targetOutputFeedbackIndicesTableStereo,
+                     _outputIndicesTableStereo);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -108,10 +109,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                      outputBuffers,
                      inputBuffers,
                      sampleCount,
-                     OutputEarlyIndicesTableQuadraphonic,
-                     TargetEarlyDelayLineIndicesTableQuadraphonic,
-                     TargetOutputFeedbackIndicesTableQuadraphonic,
-                     OutputIndicesTableQuadraphonic);
+                     _outputEarlyIndicesTableQuadraphonic,
+                     _targetEarlyDelayLineIndicesTableQuadraphonic,
+                     _targetOutputFeedbackIndicesTableQuadraphonic,
+                     _outputIndicesTableQuadraphonic);
         }
 
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -121,10 +122,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                      outputBuffers,
                      inputBuffers,
                      sampleCount,
-                     OutputEarlyIndicesTableSurround,
-                     TargetEarlyDelayLineIndicesTableSurround,
-                     TargetOutputFeedbackIndicesTableSurround,
-                     OutputIndicesTableSurround);
+                     _outputEarlyIndicesTableSurround,
+                     _targetEarlyDelayLineIndicesTableSurround,
+                     _targetOutputFeedbackIndicesTableSurround,
+                     _outputIndicesTableSurround);
         }
 
         private unsafe void ProcessReverbGeneric(ref ReverbState state, ReadOnlySpan<IntPtr> outputBuffers, ReadOnlySpan<IntPtr> inputBuffers, uint sampleCount, ReadOnlySpan<int> outputEarlyIndicesTable, ReadOnlySpan<int> targetEarlyDelayLineIndicesTable, ReadOnlySpan<int> targetOutputFeedbackIndicesTable, ReadOnlySpan<int> outputIndicesTable)
@@ -143,7 +144,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             for (int sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++)
             {
-                outputValues.Fill(0);
+                outputValues.Clear();
 
                 for (int i = 0; i < targetEarlyDelayLineIndicesTable.Length; i++)
                 {
@@ -263,11 +264,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
             if (IsEffectEnabled)
             {
-                if (Parameter.Status == Server.Effect.UsageState.Invalid)
+                if (Parameter.Status == UsageState.Invalid)
                 {
                     state = new ReverbState(ref _parameter, WorkBuffer, IsLongSizePreDelaySupported);
                 }
-                else if (Parameter.Status == Server.Effect.UsageState.New)
+                else if (Parameter.Status == UsageState.New)
                 {
                     state.UpdateParameter(ref _parameter);
                 }
@@ -276,4 +277,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             ProcessReverb(context, ref state);
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs

@@ -67,4 +67,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/VolumeCommand.cs

@@ -134,4 +134,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             ProcessVolume(outputBuffer, inputBuffer);
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Command/VolumeRampCommand.cs

@@ -53,4 +53,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
             ProcessVolumeRamp(outputBuffer, inputBuffer, (int)context.SampleCount);
         }
     }
-}
+}

+ 6 - 6
src/Ryujinx.Audio/Renderer/Dsp/DataSourceHelper.cs

@@ -76,7 +76,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
 
                     if (!info.DecodingBehaviour.HasFlag(DecodingBehaviour.SkipPitchAndSampleRateConversion))
                     {
-                        voiceState.Pitch.AsSpan().Slice(0, pitchMaxLength).CopyTo(tempBuffer);
+                        voiceState.Pitch.AsSpan()[..pitchMaxLength].CopyTo(tempBuffer);
                         tempBufferIndex += pitchMaxLength;
                     }
 
@@ -107,7 +107,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
                             voiceState.LoopContext = memoryManager.Read<AdpcmLoopContext>(waveBuffer.Context);
                         }
 
-                        Span<short> tempSpan = tempBuffer.Slice(tempBufferIndex + y);
+                        Span<short> tempSpan = tempBuffer[(tempBufferIndex + y)..];
 
                         int decodedSampleCount = -1;
 
@@ -168,7 +168,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
                                 decodedSampleCount = PcmHelper.Decode(tempSpan, waveBufferPcmFloat, targetSampleStartOffset, targetSampleEndOffset, info.ChannelIndex, info.ChannelCount);
                                 break;
                             default:
-                                Logger.Error?.Print(LogClass.AudioRenderer, $"Unsupported sample format " + info.SampleFormat);
+                                Logger.Error?.Print(LogClass.AudioRenderer, "Unsupported sample format " + info.SampleFormat);
                                 break;
                         }
 
@@ -220,7 +220,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
                         }
                     }
 
-                    Span<int> outputSpanInt = MemoryMarshal.Cast<float, int>(outputBuffer.Slice(i));
+                    Span<int> outputSpanInt = MemoryMarshal.Cast<float, int>(outputBuffer[i..]);
 
                     if (info.DecodingBehaviour.HasFlag(DecodingBehaviour.SkipPitchAndSampleRateConversion))
                     {
@@ -231,9 +231,9 @@ namespace Ryujinx.Audio.Renderer.Dsp
                     }
                     else
                     {
-                        Span<short> tempSpan = tempBuffer.Slice(tempBufferIndex + y);
+                        Span<short> tempSpan = tempBuffer[(tempBufferIndex + y)..];
 
-                        tempSpan.Slice(0, sampleCountToDecode - y).Fill(0);
+                        tempSpan[..(sampleCountToDecode - y)].Clear();
 
                         ToFloat(outputBuffer, outputSpanInt, sampleCountToProcess);
 

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Effect/DecayDelay.cs

@@ -49,4 +49,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
             return _delayLine.Tap(sampleIndex);
         }
     }
-}
+}

+ 3 - 3
src/Ryujinx.Audio/Renderer/Dsp/Effect/DelayLine.cs

@@ -4,8 +4,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
 {
     public class DelayLine : IDelayLine
     {
-        private float[] _workBuffer;
-        private uint _sampleRate;
+        private readonly float[] _workBuffer;
+        private readonly uint _sampleRate;
         private uint _currentSampleIndex;
         private uint _lastSampleIndex;
 
@@ -75,4 +75,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
             return TapUnsafe(sampleIndex, -1);
         }
     }
-}
+}

+ 3 - 3
src/Ryujinx.Audio/Renderer/Dsp/Effect/DelayLineReverb3d.cs

@@ -4,8 +4,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
 {
     public class DelayLine3d : IDelayLine
     {
-        private float[] _workBuffer;
-        private uint _sampleRate;
+        private readonly float[] _workBuffer;
+        private readonly uint _sampleRate;
         private uint _currentSampleIndex;
         private uint _lastSampleIndex;
 
@@ -73,4 +73,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
             return TapUnsafe(sampleIndex, -1);
         }
     }
-}
+}

+ 2 - 4
src/Ryujinx.Audio/Renderer/Dsp/Effect/ExponentialMovingAverage.cs

@@ -1,6 +1,4 @@
-using System.Runtime.CompilerServices;
-
-namespace Ryujinx.Audio.Renderer.Dsp.Effect
+namespace Ryujinx.Audio.Renderer.Dsp.Effect
 {
     public struct ExponentialMovingAverage
     {
@@ -11,7 +9,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
             _mean = mean;
         }
 
-        public float Read()
+        public readonly float Read()
         {
             return _mean;
         }

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/Effect/IDelayLine.cs

@@ -34,4 +34,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.Effect
             return (uint)MathF.Round(sampleRate * delayTime);
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/FixedPointHelper.cs

@@ -36,4 +36,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             return ToInt(value + half, qBits);
         }
     }
-}
+}

+ 3 - 3
src/Ryujinx.Audio/Renderer/Dsp/FloatingPointHelper.cs

@@ -1,5 +1,4 @@
 using System;
-using System.Reflection.Metadata;
 using System.Runtime.CompilerServices;
 
 namespace Ryujinx.Audio.Renderer.Dsp
@@ -39,7 +38,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
             {
                 return 1.0f;
             }
-            else if (x <= -5.3f)
+
+            if (x <= -5.3f)
             {
                 return 0.0f;
             }
@@ -112,4 +112,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             return MathF.Sin(DegreesToRadians(value));
         }
     }
-}
+}

+ 2 - 3
src/Ryujinx.Audio/Renderer/Dsp/PcmHelper.cs

@@ -1,5 +1,4 @@
 using System;
-using System.Numerics;
 using System.Runtime.CompilerServices;
 
 namespace Ryujinx.Audio.Renderer.Dsp
@@ -62,7 +61,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
         {
             for (int i = 0; i < input.Length; i++)
             {
-                output[i] = ((int)input[i]) << 16;
+                output[i] = input[i] << 16;
             }
         }
 
@@ -127,4 +126,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             return (short)value;
         }
     }
-}
+}

+ 20 - 25
src/Ryujinx.Audio/Renderer/Dsp/ResamplerHelper.cs

@@ -1,6 +1,5 @@
 using System;
 using System.Linq;
-using System.Numerics;
 using System.Runtime.CompilerServices;
 using System.Runtime.Intrinsics;
 using System.Runtime.Intrinsics.X86;
@@ -11,8 +10,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
     public static class ResamplerHelper
     {
         #region "Default Quality Lookup Tables"
-        private static short[] _normalCurveLut0 = new short[]
-        {
+        private static readonly short[] _normalCurveLut0 = {
             6600,  19426, 6722,  3,     6479,  19424, 6845,  9,     6359,  19419, 6968,  15,    6239,  19412, 7093,  22,
             6121,  19403, 7219,  28,    6004,  19391, 7345,  34,    5888,  19377, 7472,  41,    5773,  19361, 7600,  48,
             5659,  19342, 7728,  55,    5546,  19321, 7857,  62,    5434,  19298, 7987,  69,    5323,  19273, 8118,  77,
@@ -44,11 +42,10 @@ namespace Ryujinx.Audio.Renderer.Dsp
             109,   8646,  19148, 4890,  101,   8513,  19183, 4997,  92,    8381,  19215, 5104,  84,    8249,  19245, 5213,
             77,    8118,  19273, 5323,  69,    7987,  19298, 5434,  62,    7857,  19321, 5546,  55,    7728,  19342, 5659,
             48,    7600,  19361, 5773,  41,    7472,  19377, 5888,  34,    7345,  19391, 6004,  28,    7219,  19403, 6121,
-            22,    7093,  19412, 6239,  15,    6968,  19419, 6359,  9,     6845,  19424, 6479,  3,     6722,  19426, 6600
+            22,    7093,  19412, 6239,  15,    6968,  19419, 6359,  9,     6845,  19424, 6479,  3,     6722,  19426, 6600,
         };
 
-        private static short[] _normalCurveLut1 = new short[]
-        {
+        private static readonly short[] _normalCurveLut1 = {
             -68,   32639, 69,    -5,    -200,  32630, 212,   -15,   -328,  32613, 359,   -26,   -450,  32586, 512,   -36,
             -568,  32551, 669,   -47,   -680,  32507, 832,   -58,   -788,  32454, 1000,  -69,   -891,  32393, 1174,  -80,
             -990,  32323, 1352,  -92,   -1084, 32244, 1536,  -103,  -1173, 32157, 1724,  -115,  -1258, 32061, 1919,  -128,
@@ -80,11 +77,10 @@ namespace Ryujinx.Audio.Renderer.Dsp
             -180,  2747,  31593, -1554, -167,  2532,  31723, -1486, -153,  2322,  31844, -1414, -140,  2118,  31956, -1338,
             -128,  1919,  32061, -1258, -115,  1724,  32157, -1173, -103,  1536,  32244, -1084, -92,   1352,  32323, -990,
             -80,   1174,  32393, -891,  -69,   1000,  32454, -788,  -58,   832,   32507, -680,  -47,   669,   32551, -568,
-            -36,   512,   32586, -450,  -26,   359,   32613, -328,  -15,   212,   32630, -200,  -5,    69,    32639, -68
+            -36,   512,   32586, -450,  -26,   359,   32613, -328,  -15,   212,   32630, -200,  -5,    69,    32639, -68,
         };
 
-        private static short[] _normalCurveLut2 = new short[]
-        {
+        private static readonly short[] _normalCurveLut2 = {
             3195,  26287, 3329,  -32,   3064,  26281, 3467,  -34,   2936,  26270, 3608,  -38,   2811,  26253, 3751,  -42,
             2688,  26230, 3897,  -46,   2568,  26202, 4046,  -50,   2451,  26169, 4199,  -54,   2338,  26130, 4354,  -58,
             2227,  26085, 4512,  -63,   2120,  26035, 4673,  -67,   2015,  25980, 4837,  -72,   1912,  25919, 5004,  -76,
@@ -116,13 +112,12 @@ namespace Ryujinx.Audio.Renderer.Dsp
             -98,   5701,  25621, 1531,  -92,   5522,  25704, 1622,  -87,   5347,  25780, 1716,  -81,   5174,  25852, 1813,
             -76,   5004,  25919, 1912,  -72,   4837,  25980, 2015,  -67,   4673,  26035, 2120,  -63,   4512,  26085, 2227,
             -58,   4354,  26130, 2338,  -54,   4199,  26169, 2451,  -50,   4046,  26202, 2568,  -46,   3897,  26230, 2688,
-            -42,   3751,  26253, 2811,  -38,   3608,  26270, 2936,  -34,   3467,  26281, 3064,  -32,   3329,  26287, 3195
+            -42,   3751,  26253, 2811,  -38,   3608,  26270, 2936,  -34,   3467,  26281, 3064,  -32,   3329,  26287, 3195,
         };
         #endregion
 
         #region "High Quality Lookup Tables"
-        private static short[] _highCurveLut0 = new short[]
-        {
+        private static readonly short[] _highCurveLut0 = {
             -582, -23,  8740, 16386, 8833,  8,    -590,  0,    -573, -54,  8647, 16385, 8925,  40,   -598, -1,
             -565, -84,  8555, 16383, 9018,  72,   -606,  -1,   -557, -113, 8462, 16379, 9110,  105,  -614, -2,
             -549, -142, 8370, 16375, 9203,  139,  -622,  -2,   -541, -170, 8277, 16369, 9295,  173,  -630, -3,
@@ -189,8 +184,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
             -1,   -598, 40,   8925,  16385, 8647, -54,   -573, 0,    -590, 8,    8833,  16386, 8740, -23,  -582,
         };
 
-        private static short[] _highCurveLut1 = new short[]
-        {
+        private static readonly short[] _highCurveLut1 = {
             -12,  47,   -134,  32767, 81,     -16,   2,     0,    -26,  108,  -345,   32760, 301,   -79,   17,   -1,
             -40,  168,  -552,  32745, 526,    -144,  32,    -2,   -53,  226,  -753,   32723, 755,   -210,  47,   -3,
             -66,  284,  -950,  32694, 989,    -277,  63,    -5,   -78,  340,  -1143,  32658, 1226,  -346,  79,   -6,
@@ -257,8 +251,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
             -1,   17,   -79,   301,   32760,  -345,  108,   -26,  0,    2,    -16,    81,    32767, -134,  47,   -12,
         };
 
-        private static short[] _highCurveLut2 = new short[]
-        {
+        private static readonly short[] _highCurveLut2 = {
             418, -2538, 6118,  24615, 6298,  -2563, 417,   0,   420, -2512, 5939,  24611, 6479,  -2588, 415,   1,
             421, -2485, 5761,  24605, 6662,  -2612, 412,   2,   422, -2458, 5585,  24595, 6846,  -2635, 409,   3,
             423, -2430, 5410,  24582, 7030,  -2658, 406,   4,   423, -2402, 5236,  24565, 7216,  -2680, 403,   5,
@@ -326,13 +319,13 @@ namespace Ryujinx.Audio.Renderer.Dsp
         };
         #endregion
 
-        private static float[] _normalCurveLut0F;
-        private static float[] _normalCurveLut1F;
-        private static float[] _normalCurveLut2F;
+        private static readonly float[] _normalCurveLut0F;
+        private static readonly float[] _normalCurveLut1F;
+        private static readonly float[] _normalCurveLut2F;
 
-        private static float[] _highCurveLut0F;
-        private static float[] _highCurveLut1F;
-        private static float[] _highCurveLut2F;
+        private static readonly float[] _highCurveLut0F;
+        private static readonly float[] _highCurveLut1F;
+        private static readonly float[] _highCurveLut2F;
 
         static ResamplerHelper()
         {
@@ -373,7 +366,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
             {
                 return _normalCurveLut1F;
             }
-            else if (ratio > 1.333313f)
+
+            if (ratio > 1.333313f)
             {
                 return _normalCurveLut0F;
             }
@@ -514,7 +508,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
             {
                 return _highCurveLut1F;
             }
-            else if (ratio > 1.333313f)
+
+            if (ratio > 1.333313f)
             {
                 return _highCurveLut0F;
             }
@@ -601,4 +596,4 @@ namespace Ryujinx.Audio.Renderer.Dsp
             }
         }
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/State/AdpcmLoopContext.cs

@@ -9,4 +9,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
         public short History0;
         public short History1;
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/State/AuxiliaryBufferHeader.cs

@@ -71,4 +71,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
         public AuxiliaryBufferInfo CpuBufferInfo;
         public AuxiliaryBufferInfo DspBufferInfo;
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/State/BiquadFilterState.cs

@@ -10,4 +10,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
         public float State2;
         public float State3;
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Dsp/State/DelayState.cs

@@ -64,4 +64,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             }
         }
     }
-}
+}

+ 4 - 4
src/Ryujinx.Audio/Renderer/Dsp/State/LimiterState.cs

@@ -20,12 +20,12 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
             DetectorAverage.AsSpan().Fill(new ExponentialMovingAverage(0.0f));
             CompressionGainAverage.AsSpan().Fill(new ExponentialMovingAverage(1.0f));
-            DelayedSampleBufferPosition.AsSpan().Fill(0);
-            DelayedSampleBuffer.AsSpan().Fill(0.0f);
+            DelayedSampleBufferPosition.AsSpan().Clear();
+            DelayedSampleBuffer.AsSpan().Clear();
 
             UpdateParameter(ref parameter);
         }
 
-        public void UpdateParameter(ref LimiterParameter parameter) { }
+        public static void UpdateParameter(ref LimiterParameter parameter) { }
     }
-}
+}

+ 12 - 12
src/Ryujinx.Audio/Renderer/Dsp/State/Reverb3dState.cs

@@ -6,11 +6,11 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 {
     public class Reverb3dState
     {
-        private readonly float[] FdnDelayMinTimes = new float[4] { 5.0f, 6.0f, 13.0f, 14.0f };
-        private readonly float[] FdnDelayMaxTimes = new float[4] { 45.704f, 82.782f, 149.94f, 271.58f };
-        private readonly float[] DecayDelayMaxTimes1 = new float[4] { 17.0f, 13.0f, 9.0f, 7.0f };
-        private readonly float[] DecayDelayMaxTimes2 = new float[4] { 19.0f, 11.0f, 10.0f, 6.0f };
-        private readonly float[] EarlyDelayTimes = new float[20] { 0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f };
+        private readonly float[] _fdnDelayMinTimes = new float[4] { 5.0f, 6.0f, 13.0f, 14.0f };
+        private readonly float[] _fdnDelayMaxTimes = new float[4] { 45.704f, 82.782f, 149.94f, 271.58f };
+        private readonly float[] _decayDelayMaxTimes1 = new float[4] { 17.0f, 13.0f, 9.0f, 7.0f };
+        private readonly float[] _decayDelayMaxTimes2 = new float[4] { 19.0f, 11.0f, 10.0f, 6.0f };
+        private readonly float[] _earlyDelayTimes = new float[20] { 0.017136f, 0.059154f, 0.16173f, 0.39019f, 0.42526f, 0.45541f, 0.68974f, 0.74591f, 0.83384f, 0.8595f, 0.0f, 0.075024f, 0.16879f, 0.2999f, 0.33744f, 0.3719f, 0.59901f, 0.71674f, 0.81786f, 0.85166f };
         public readonly float[] EarlyGain = new float[20] { 0.67096f, 0.61027f, 1.0f, 0.35680f, 0.68361f, 0.65978f, 0.51939f, 0.24712f, 0.45945f, 0.45021f, 0.64196f, 0.54879f, 0.92925f, 0.38270f, 0.72867f, 0.69794f, 0.5464f, 0.24563f, 0.45214f, 0.44042f };
 
         public IDelayLine[] FdnDelayLines { get; }
@@ -46,9 +46,9 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
             for (int i = 0; i < 4; i++)
             {
-                FdnDelayLines[i] = new DelayLine3d(sampleRate, FdnDelayMaxTimes[i]);
-                DecayDelays1[i] = new DecayDelay(new DelayLine3d(sampleRate, DecayDelayMaxTimes1[i]));
-                DecayDelays2[i] = new DecayDelay(new DelayLine3d(sampleRate, DecayDelayMaxTimes2[i]));
+                FdnDelayLines[i] = new DelayLine3d(sampleRate, _fdnDelayMaxTimes[i]);
+                DecayDelays1[i] = new DecayDelay(new DelayLine3d(sampleRate, _decayDelayMaxTimes1[i]));
+                DecayDelays2[i] = new DecayDelay(new DelayLine3d(sampleRate, _decayDelayMaxTimes2[i]));
             }
 
             PreDelayLine = new DelayLine3d(sampleRate, 400);
@@ -63,7 +63,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
             EarlyDelayTime = new uint[20];
             DryGain = parameter.DryGain;
-            PreviousFeedbackOutputDecayed.AsSpan().Fill(0);
+            PreviousFeedbackOutputDecayed.AsSpan().Clear();
             PreviousPreDelayValue = 0;
 
             EarlyReflectionsGain = FloatingPointHelper.Pow10(Math.Min(parameter.RoomGain + parameter.ReflectionsGain, 5000.0f) / 2000.0f);
@@ -91,7 +91,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
             for (int i = 0; i < FdnDelayLines.Length; i++)
             {
-                FdnDelayLines[i].SetDelay(FdnDelayMinTimes[i] + (parameter.Density / 100 * (FdnDelayMaxTimes[i] - FdnDelayMinTimes[i])));
+                FdnDelayLines[i].SetDelay(_fdnDelayMinTimes[i] + (parameter.Density / 100 * (_fdnDelayMaxTimes[i] - _fdnDelayMinTimes[i])));
 
                 uint tempSampleCount = FdnDelayLines[i].CurrentSampleCount + DecayDelays1[i].CurrentSampleCount + DecayDelays2[i].CurrentSampleCount;
 
@@ -111,9 +111,9 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
             for (int i = 0; i < EarlyDelayTime.Length; i++)
             {
-                uint sampleCount = Math.Min(IDelayLine.GetSampleCount(sampleRate, (parameter.ReflectionDelay * 1000.0f) + (EarlyDelayTimes[i] * 1000.0f * ((parameter.ReverbDelayTime * 0.9998f) + 0.02f))), PreDelayLine.SampleCountMax);
+                uint sampleCount = Math.Min(IDelayLine.GetSampleCount(sampleRate, (parameter.ReflectionDelay * 1000.0f) + (_earlyDelayTimes[i] * 1000.0f * ((parameter.ReverbDelayTime * 0.9998f) + 0.02f))), PreDelayLine.SampleCountMax);
                 EarlyDelayTime[i] = sampleCount;
             }
         }
     }
-}
+}

+ 16 - 16
src/Ryujinx.Audio/Renderer/Dsp/State/ReverbState.cs

@@ -7,7 +7,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 {
     public class ReverbState
     {
-        private static readonly float[] FdnDelayTimes = new float[20]
+        private static readonly float[] _fdnDelayTimes = new float[20]
         {
             // Room
             53.953247f, 79.192566f, 116.238770f, 130.615295f,
@@ -21,7 +21,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             53.953247f, 79.192566f, 116.238770f, 170.615295f,
         };
 
-        private static readonly float[] DecayDelayTimes = new float[20]
+        private static readonly float[] _decayDelayTimes = new float[20]
         {
             // Room
             7f, 9f, 13f, 17f,
@@ -35,7 +35,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             7f, 9f, 13f, 17f,
         };
 
-        private static readonly float[] EarlyDelayTimes = new float[50]
+        private static readonly float[] _earlyDelayTimes = new float[50]
         {
             // Room
             0.0f, 3.5f, 2.8f, 3.9f, 2.7f, 13.4f, 7.9f, 8.4f, 9.9f, 12.0f,
@@ -46,10 +46,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             // Cathedral
             33.1f, 43.3f, 22.8f, 37.9f, 14.9f, 35.3f, 17.9f, 34.2f, 0.0f, 43.3f,
             // Disabled
-            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
+            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
         };
 
-        private static readonly float[] EarlyGainBase = new float[50]
+        private static readonly float[] _earlyGainBase = new float[50]
         {
             // Room
             0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.70f, 0.68f, 0.68f, 0.68f,
@@ -60,10 +60,10 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             // Cathedral
             0.93f, 0.92f, 0.87f, 0.86f, 0.94f, 0.81f, 0.80f, 0.77f, 0.76f, 0.65f,
             // Disabled
-            0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f
+            0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f, 0.00f,
         };
 
-        private static readonly float[] PreDelayTimes = new float[5]
+        private static readonly float[] _preDelayTimes = new float[5]
         {
             // Room
             12.5f,
@@ -74,7 +74,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             // Cathedral
             50.0f,
             // Disabled
-            0.0f
+            0.0f,
         };
 
         public DelayLine[] FdnDelayLines { get; }
@@ -93,14 +93,14 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
         private const int FixedPointPrecision = 14;
 
-        private ReadOnlySpan<float> GetFdnDelayTimesByLateMode(ReverbLateMode lateMode)
+        private static ReadOnlySpan<float> GetFdnDelayTimesByLateMode(ReverbLateMode lateMode)
         {
-            return FdnDelayTimes.AsSpan((int)lateMode * 4, 4);
+            return _fdnDelayTimes.AsSpan((int)lateMode * 4, 4);
         }
 
-        private ReadOnlySpan<float> GetDecayDelayTimesByLateMode(ReverbLateMode lateMode)
+        private static ReadOnlySpan<float> GetDecayDelayTimesByLateMode(ReverbLateMode lateMode)
         {
-            return DecayDelayTimes.AsSpan((int)lateMode * 4, 4);
+            return _decayDelayTimes.AsSpan((int)lateMode * 4, 4);
         }
 
         public ReverbState(ref ReverbParameter parameter, ulong workBuffer, bool isLongSizePreDelaySupported)
@@ -148,8 +148,8 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
 
             for (int i = 0; i < 10; i++)
             {
-                EarlyDelayTime[i] = Math.Min(IDelayLine.GetSampleCount(sampleRate, EarlyDelayTimes[i] + preDelayTimeInMilliseconds), PreDelayLine.SampleCountMax) + 1;
-                EarlyGain[i] = EarlyGainBase[i] * earlyGain;
+                EarlyDelayTime[i] = Math.Min(IDelayLine.GetSampleCount(sampleRate, _earlyDelayTimes[i] + preDelayTimeInMilliseconds), PreDelayLine.SampleCountMax) + 1;
+                EarlyGain[i] = _earlyGainBase[i] * earlyGain;
             }
 
             if (parameter.ChannelCount == 2)
@@ -158,7 +158,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
                 EarlyGain[5] = EarlyGain[5] * 0.5f;
             }
 
-            PreDelayLineDelayTime = Math.Min(IDelayLine.GetSampleCount(sampleRate, PreDelayTimes[(int)parameter.EarlyMode] + preDelayTimeInMilliseconds), PreDelayLine.SampleCountMax);
+            PreDelayLineDelayTime = Math.Min(IDelayLine.GetSampleCount(sampleRate, _preDelayTimes[(int)parameter.EarlyMode] + preDelayTimeInMilliseconds), PreDelayLine.SampleCountMax);
 
             ReadOnlySpan<float> fdnDelayTimes = GetFdnDelayTimesByLateMode(parameter.LateMode);
             ReadOnlySpan<float> decayDelayTimes = GetDecayDelayTimesByLateMode(parameter.LateMode);
@@ -201,4 +201,4 @@ namespace Ryujinx.Audio.Renderer.Dsp.State
             }
         }
     }
-}
+}

+ 20 - 20
src/Ryujinx.Audio/Renderer/Dsp/UpsamplerHelper.cs

@@ -13,11 +13,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
         private const int FilterBankLength = 20;
         // Bank0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
         private const int Bank0CenterIndex = 9;
-        private static readonly Array20<float> Bank1 = PrecomputeFilterBank(1.0f / 6.0f);
-        private static readonly Array20<float> Bank2 = PrecomputeFilterBank(2.0f / 6.0f);
-        private static readonly Array20<float> Bank3 = PrecomputeFilterBank(3.0f / 6.0f);
-        private static readonly Array20<float> Bank4 = PrecomputeFilterBank(4.0f / 6.0f);
-        private static readonly Array20<float> Bank5 = PrecomputeFilterBank(5.0f / 6.0f);
+        private static readonly Array20<float> _bank1 = PrecomputeFilterBank(1.0f / 6.0f);
+        private static readonly Array20<float> _bank2 = PrecomputeFilterBank(2.0f / 6.0f);
+        private static readonly Array20<float> _bank3 = PrecomputeFilterBank(3.0f / 6.0f);
+        private static readonly Array20<float> _bank4 = PrecomputeFilterBank(4.0f / 6.0f);
+        private static readonly Array20<float> _bank5 = PrecomputeFilterBank(5.0f / 6.0f);
 
         private static Array20<float> PrecomputeFilterBank(float offset)
         {
@@ -39,7 +39,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
                 return A0 + A1 * MathF.Cos(2 * MathF.PI * x) + A2 * MathF.Cos(4 * MathF.PI * x);
             }
 
-            Array20<float> result = new Array20<float>();
+            Array20<float> result = new();
 
             for (int i = 0; i < FilterBankLength; i++)
             {
@@ -58,10 +58,10 @@ namespace Ryujinx.Audio.Renderer.Dsp
             {
                 state.Scale = inputSampleCount switch
                 {
-                    40  => 6.0f,
-                    80  => 3.0f,
+                    40 => 6.0f,
+                    80 => 3.0f,
                     160 => 1.5f,
-                    _   => throw new ArgumentOutOfRangeException()
+                    _ => throw new ArgumentOutOfRangeException(nameof(inputSampleCount), inputSampleCount, null),
                 };
                 state.Initialized = true;
             }
@@ -105,7 +105,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
             [MethodImpl(MethodImplOptions.AggressiveInlining)]
             void NextInput(ref UpsamplerBufferState state, float input)
             {
-                state.History.AsSpan().Slice(1).CopyTo(state.History.AsSpan());
+                state.History.AsSpan()[1..].CopyTo(state.History.AsSpan());
                 state.History[HistoryLength - 1] = input;
             }
 
@@ -123,19 +123,19 @@ namespace Ryujinx.Audio.Renderer.Dsp
                                 outputBuffer[i] = state.History[Bank0CenterIndex];
                                 break;
                             case 1:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank1);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank1);
                                 break;
                             case 2:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank2);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank2);
                                 break;
                             case 3:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank3);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank3);
                                 break;
                             case 4:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank4);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank4);
                                 break;
                             case 5:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank5);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank5);
                                 break;
                         }
 
@@ -152,10 +152,10 @@ namespace Ryujinx.Audio.Renderer.Dsp
                                 outputBuffer[i] = state.History[Bank0CenterIndex];
                                 break;
                             case 1:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank2);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank2);
                                 break;
                             case 2:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank4);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank4);
                                 break;
                         }
 
@@ -173,11 +173,11 @@ namespace Ryujinx.Audio.Renderer.Dsp
                                 outputBuffer[i] = state.History[Bank0CenterIndex];
                                 break;
                             case 1:
-                                outputBuffer[i] = DoFilterBank(ref state, Bank4);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank4);
                                 break;
                             case 2:
                                 NextInput(ref state, inputBuffer[inputBufferIndex++]);
-                                outputBuffer[i] = DoFilterBank(ref state, Bank2);
+                                outputBuffer[i] = DoFilterBank(ref state, _bank2);
                                 break;
                         }
 
@@ -185,7 +185,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
                     }
                     break;
                 default:
-                    throw new ArgumentOutOfRangeException();
+                    throw new ArgumentOutOfRangeException(nameof(state), state.Scale, null);
             }
         }
     }

+ 2 - 2
src/Ryujinx.Audio/Renderer/Parameter/AudioRendererConfiguration.cs

@@ -60,7 +60,7 @@ namespace Ryujinx.Audio.Renderer.Parameter
         /// <summary>
         /// Reserved/unused
         /// </summary>
-        private byte _reserved;
+        private readonly byte _reserved;
 
         /// <summary>
         /// The target rendering device.
@@ -96,4 +96,4 @@ namespace Ryujinx.Audio.Renderer.Parameter
         /// <seealso cref="Server.BehaviourContext"/>
         public int Revision;
     }
-}
+}

+ 1 - 1
src/Ryujinx.Audio/Renderer/Parameter/BehaviourErrorInfoOutStatus.cs

@@ -27,4 +27,4 @@ namespace Ryujinx.Audio.Renderer.Parameter
         /// </summary>
         private unsafe fixed uint _reserved[3];
     }
-}
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов