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

amadeus: Allow 5.1 sink output (#4894)

* amadeus: Allow 5.1 sink output

Also add a simple Stereo to 5.1 change for device sink.

Tested against NES - Nintendo Switch Online that output stereo on the
audio renderer.

* Remove outdated comment
Mary 2 лет назад
Родитель
Сommit
5cbdfbc7a4

+ 1 - 3
src/Ryujinx.Audio/Renderer/Dsp/AudioProcessor.cs

@@ -65,9 +65,7 @@ namespace Ryujinx.Audio.Renderer.Dsp
         {
             OutputDevices = new IHardwareDevice[Constants.AudioRendererSessionCountMax];
 
-            // TODO: Before enabling this, we need up-mixing from stereo to 5.1.
-            // uint channelCount = GetHardwareChannelCount(deviceDriver);
-            uint channelCount = 2;
+            uint channelCount = GetHardwareChannelCount(deviceDriver);
 
             for (int i = 0; i < OutputDevices.Length; i++)
             {

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

@@ -67,7 +67,19 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
 
                 const int sampleCount = Constants.TargetSampleCount;
 
-                short[] outputBuffer = new short[bufferCount * sampleCount];
+                uint inputCount;
+
+                // In case of upmixing to 5.1, we allocate the right amount.
+                if (bufferCount != channelCount && channelCount == 6)
+                {
+                    inputCount = (uint)channelCount;
+                }
+                else
+                {
+                    inputCount = bufferCount;
+                }
+
+                short[] outputBuffer = new short[inputCount * sampleCount];
 
                 for (int i = 0; i < bufferCount; i++)
                 {
@@ -79,7 +91,7 @@ namespace Ryujinx.Audio.Renderer.Dsp.Command
                     }
                 }
 
-                device.AppendBuffer(outputBuffer, InputCount);
+                device.AppendBuffer(outputBuffer, inputCount);
             }
             else
             {