From 41bba5310a5324f54fa5c0200aff2bf697ced000 Mon Sep 17 00:00:00 2001 From: merry Date: Sun, 15 Jan 2023 04:20:49 +0000 Subject: Audren: Implement polyphase upsampler (#4256) * Audren: Implement polyphase upsampler * prefer shifting to modulo * prefer MathF * fix nits * rm ResampleForUpsampler * oop * Array20 * nits --- Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs') diff --git a/Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs b/Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs index 1617a642..0870d59c 100644 --- a/Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs +++ b/Ryujinx.Audio/Renderer/Dsp/Command/UpsampleCommand.cs @@ -40,6 +40,12 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command info.InputBufferIndices[i] = (ushort)(bufferOffset + inputBufferOffset[i]); } + if (info.BufferStates?.Length != (int)inputCount) + { + // Keep state if possible. + info.BufferStates = new UpsamplerBufferState[(int)inputCount]; + } + UpsamplerInfo = info; } @@ -50,8 +56,6 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command public void Process(CommandList context) { - float ratio = (float)InputSampleRate / Constants.TargetSampleRate; - uint bufferCount = Math.Min(BufferCount, UpsamplerInfo.SourceSampleCount); for (int i = 0; i < bufferCount; i++) @@ -59,9 +63,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command Span inputBuffer = context.GetBuffer(UpsamplerInfo.InputBufferIndices[i]); Span outputBuffer = GetBuffer(UpsamplerInfo.InputBufferIndices[i], (int)UpsamplerInfo.SampleCount); - float fraction = 0.0f; - - ResamplerHelper.ResampleForUpsampler(outputBuffer, inputBuffer, ratio, ref fraction, (int)(InputSampleCount / ratio)); + UpsamplerHelper.Upsample(outputBuffer, inputBuffer, (int)UpsamplerInfo.SampleCount, (int)InputSampleCount, ref UpsamplerInfo.BufferStates[i]); } } } -- cgit v1.2.3