Audio: Fix Surround (5.1) audio write callback
This commit is contained in:
parent
fa31b1c2ca
commit
dab65b13d7
1 changed files with 21 additions and 4 deletions
|
@ -247,13 +247,14 @@ namespace Ryujinx.Audio.SoundIo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Surround
|
// Surround
|
||||||
else if (channelCount == 5)
|
else if (channelCount == 6)
|
||||||
{
|
{
|
||||||
var area1 = areas.GetArea(0);
|
var area1 = areas.GetArea(0);
|
||||||
var area2 = areas.GetArea(1);
|
var area2 = areas.GetArea(1);
|
||||||
var area3 = areas.GetArea(2);
|
var area3 = areas.GetArea(2);
|
||||||
var area4 = areas.GetArea(3);
|
var area4 = areas.GetArea(3);
|
||||||
var area5 = areas.GetArea(4);
|
var area5 = areas.GetArea(4);
|
||||||
|
var area6 = areas.GetArea(5);
|
||||||
|
|
||||||
fixed (byte* srcptr = samples)
|
fixed (byte* srcptr = samples)
|
||||||
{
|
{
|
||||||
|
@ -276,11 +277,15 @@ namespace Ryujinx.Audio.SoundIo
|
||||||
// Channel 5
|
// Channel 5
|
||||||
((byte*)area5.Pointer)[0] = srcptr[(frame * bytesPerFrame) + 4];
|
((byte*)area5.Pointer)[0] = srcptr[(frame * bytesPerFrame) + 4];
|
||||||
|
|
||||||
|
// Channel 6
|
||||||
|
((byte*)area6.Pointer)[0] = srcptr[(frame * bytesPerFrame) + 5];
|
||||||
|
|
||||||
area1.Pointer += area1.Step;
|
area1.Pointer += area1.Step;
|
||||||
area2.Pointer += area2.Step;
|
area2.Pointer += area2.Step;
|
||||||
area3.Pointer += area3.Step;
|
area3.Pointer += area3.Step;
|
||||||
area4.Pointer += area4.Step;
|
area4.Pointer += area4.Step;
|
||||||
area5.Pointer += area5.Step;
|
area5.Pointer += area5.Step;
|
||||||
|
area6.Pointer += area6.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (bytesPerSample == 2)
|
else if (bytesPerSample == 2)
|
||||||
|
@ -302,11 +307,15 @@ namespace Ryujinx.Audio.SoundIo
|
||||||
// Channel 5
|
// Channel 5
|
||||||
((short*)area5.Pointer)[0] = ((short*)srcptr)[(frame * bytesPerFrame >> 1) + 4];
|
((short*)area5.Pointer)[0] = ((short*)srcptr)[(frame * bytesPerFrame >> 1) + 4];
|
||||||
|
|
||||||
|
// Channel 6
|
||||||
|
((short*)area6.Pointer)[0] = ((short*)srcptr)[(frame * bytesPerFrame >> 1) + 5];
|
||||||
|
|
||||||
area1.Pointer += area1.Step;
|
area1.Pointer += area1.Step;
|
||||||
area2.Pointer += area2.Step;
|
area2.Pointer += area2.Step;
|
||||||
area3.Pointer += area3.Step;
|
area3.Pointer += area3.Step;
|
||||||
area4.Pointer += area4.Step;
|
area4.Pointer += area4.Step;
|
||||||
area5.Pointer += area5.Step;
|
area5.Pointer += area5.Step;
|
||||||
|
area6.Pointer += area6.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (bytesPerSample == 4)
|
else if (bytesPerSample == 4)
|
||||||
|
@ -328,11 +337,15 @@ namespace Ryujinx.Audio.SoundIo
|
||||||
// Channel 5
|
// Channel 5
|
||||||
((int*)area5.Pointer)[0] = ((int*)srcptr)[(frame * bytesPerFrame >> 2) + 4];
|
((int*)area5.Pointer)[0] = ((int*)srcptr)[(frame * bytesPerFrame >> 2) + 4];
|
||||||
|
|
||||||
|
// Channel 6
|
||||||
|
((int*)area6.Pointer)[0] = ((int*)srcptr)[(frame * bytesPerFrame >> 2) + 5];
|
||||||
|
|
||||||
area1.Pointer += area1.Step;
|
area1.Pointer += area1.Step;
|
||||||
area2.Pointer += area2.Step;
|
area2.Pointer += area2.Step;
|
||||||
area3.Pointer += area3.Step;
|
area3.Pointer += area3.Step;
|
||||||
area4.Pointer += area4.Step;
|
area4.Pointer += area4.Step;
|
||||||
area5.Pointer += area5.Step;
|
area5.Pointer += area5.Step;
|
||||||
|
area6.Pointer += area6.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -346,19 +359,23 @@ namespace Ryujinx.Audio.SoundIo
|
||||||
Unsafe.CopyBlockUnaligned((byte*)area2.Pointer, srcptr + (frame * bytesPerFrame) + (1 * bytesPerSample), bytesPerSample);
|
Unsafe.CopyBlockUnaligned((byte*)area2.Pointer, srcptr + (frame * bytesPerFrame) + (1 * bytesPerSample), bytesPerSample);
|
||||||
|
|
||||||
// Channel 3
|
// Channel 3
|
||||||
Unsafe.CopyBlockUnaligned((byte*)area1.Pointer, srcptr + (frame * bytesPerFrame) + (2 * bytesPerSample), bytesPerSample);
|
Unsafe.CopyBlockUnaligned((byte*)area3.Pointer, srcptr + (frame * bytesPerFrame) + (2 * bytesPerSample), bytesPerSample);
|
||||||
|
|
||||||
// Channel 4
|
// Channel 4
|
||||||
Unsafe.CopyBlockUnaligned((byte*)area2.Pointer, srcptr + (frame * bytesPerFrame) + (3 * bytesPerSample), bytesPerSample);
|
Unsafe.CopyBlockUnaligned((byte*)area4.Pointer, srcptr + (frame * bytesPerFrame) + (3 * bytesPerSample), bytesPerSample);
|
||||||
|
|
||||||
// Channel 5
|
// Channel 5
|
||||||
Unsafe.CopyBlockUnaligned((byte*)area1.Pointer, srcptr + (frame * bytesPerFrame) + (4 * bytesPerSample), bytesPerSample);
|
Unsafe.CopyBlockUnaligned((byte*)area5.Pointer, srcptr + (frame * bytesPerFrame) + (4 * bytesPerSample), bytesPerSample);
|
||||||
|
|
||||||
|
// Channel 6
|
||||||
|
Unsafe.CopyBlockUnaligned((byte*)area6.Pointer, srcptr + (frame * bytesPerFrame) + (5 * bytesPerSample), bytesPerSample);
|
||||||
|
|
||||||
area1.Pointer += area1.Step;
|
area1.Pointer += area1.Step;
|
||||||
area2.Pointer += area2.Step;
|
area2.Pointer += area2.Step;
|
||||||
area3.Pointer += area3.Step;
|
area3.Pointer += area3.Step;
|
||||||
area4.Pointer += area4.Step;
|
area4.Pointer += area4.Step;
|
||||||
area5.Pointer += area5.Step;
|
area5.Pointer += area5.Step;
|
||||||
|
area6.Pointer += area6.Step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue