diff options
author | Mary-nyan <mary@mary.zone> | 2022-12-06 15:04:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-06 15:04:25 +0100 |
commit | 40311310d1a6d2fde2ee9f04bfa1f21ced7cbee2 (patch) | |
tree | beec52c0a73006552aae3b1d9538240ddc89e6ae /Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs | |
parent | dde9bb5c69d2e1a70df82af8accd3d01fb94b78d (diff) |
amadeus: Add missing compressor effect from REV11 (#4010)1.1.435
* amadeus: Add missing compressor effect from REV11
This was in my reversing notes but seems I completely forgot to
implement it
Also took the opportunity to simplify the Limiter effect a bit.
* Remove some outdated comment
* Address gdkchan's comments
Diffstat (limited to 'Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs')
-rw-r--r-- | Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs b/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs index 46c95e4f..950de97b 100644 --- a/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs +++ b/Ryujinx.Audio/Renderer/Dsp/Command/LimiterCommandVersion2.cs @@ -101,32 +101,31 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command float inputCoefficient = Parameter.ReleaseCoefficient; - if (sampleInputMax > state.DectectorAverage[channelIndex]) + if (sampleInputMax > state.DetectorAverage[channelIndex].Read()) { inputCoefficient = Parameter.AttackCoefficient; } - state.DectectorAverage[channelIndex] += inputCoefficient * (sampleInputMax - state.DectectorAverage[channelIndex]); - + float detectorValue = state.DetectorAverage[channelIndex].Update(sampleInputMax, inputCoefficient); float attenuation = 1.0f; - if (state.DectectorAverage[channelIndex] > Parameter.Threshold) + if (detectorValue > Parameter.Threshold) { - attenuation = Parameter.Threshold / state.DectectorAverage[channelIndex]; + attenuation = Parameter.Threshold / detectorValue; } float outputCoefficient = Parameter.ReleaseCoefficient; - if (state.CompressionGain[channelIndex] > attenuation) + if (state.CompressionGainAverage[channelIndex].Read() > attenuation) { outputCoefficient = Parameter.AttackCoefficient; } - state.CompressionGain[channelIndex] += outputCoefficient * (attenuation - state.CompressionGain[channelIndex]); + float compressionGain = state.CompressionGainAverage[channelIndex].Update(attenuation, outputCoefficient); ref float delayedSample = ref state.DelayedSampleBuffer[channelIndex * Parameter.DelayBufferSampleCountMax + state.DelayedSampleBufferPosition[channelIndex]]; - float outputSample = delayedSample * state.CompressionGain[channelIndex] * Parameter.OutputGain; + float outputSample = delayedSample * compressionGain * Parameter.OutputGain; *((float*)outputBuffers[channelIndex] + sampleIndex) = outputSample * short.MaxValue; @@ -144,7 +143,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command ref LimiterStatistics statistics = ref MemoryMarshal.Cast<byte, LimiterStatistics>(ResultState.Span[0].SpecificData)[0]; statistics.InputMax[channelIndex] = Math.Max(statistics.InputMax[channelIndex], sampleInputMax); - statistics.CompressionGainMin[channelIndex] = Math.Min(statistics.CompressionGainMin[channelIndex], state.CompressionGain[channelIndex]); + statistics.CompressionGainMin[channelIndex] = Math.Min(statistics.CompressionGainMin[channelIndex], compressionGain); } } } |