snes-fix new bugs in audio
This commit is contained in:
parent
8d7da30681
commit
f1401a16e1
|
@ -414,18 +414,20 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
|
||||||
int nsamples = brPipe.ReadInt32();
|
int nsamples = brPipe.ReadInt32();
|
||||||
bwPipe.Write(0); //location to store audio buffer in
|
bwPipe.Write(0); //location to store audio buffer in
|
||||||
brPipe.ReadInt32(); //dummy synchronization
|
brPipe.ReadInt32(); //dummy synchronization
|
||||||
bwPipe.Write(0); //dummy synchronization
|
|
||||||
brPipe.ReadInt32(); //dummy synchronization
|
|
||||||
if (audio_sample != null)
|
if (audio_sample != null)
|
||||||
{
|
{
|
||||||
ushort* audiobuffer = ((ushort*)mmvaPtr);
|
ushort* audiobuffer = ((ushort*)mmvaPtr);
|
||||||
for (int i = 0; i < nsamples; i++)
|
for (int i = 0; i < nsamples;)
|
||||||
{
|
{
|
||||||
ushort left = audiobuffer[i++];
|
ushort left = audiobuffer[i++];
|
||||||
ushort right = audiobuffer[i++];
|
ushort right = audiobuffer[i++];
|
||||||
audio_sample(left, right);
|
audio_sample(left, right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bwPipe.Write(0); //dummy synchronization
|
||||||
|
brPipe.ReadInt32(); //dummy synchronization
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case eMessage.eMessage_snes_cb_scanlineStart:
|
case eMessage.eMessage_snes_cb_scanlineStart:
|
||||||
|
|
Binary file not shown.
|
@ -164,13 +164,15 @@ void FlushAudio()
|
||||||
|
|
||||||
WritePipe(eMessage_snes_cb_audio_sample);
|
WritePipe(eMessage_snes_cb_audio_sample);
|
||||||
|
|
||||||
int nsamples = audiobuffer_idx/2;
|
int nsamples = audiobuffer_idx;
|
||||||
WritePipe(nsamples);
|
WritePipe(nsamples);
|
||||||
int destOfs = ReadPipe<int>();
|
char* buf = ReadPipeSharedPtr();
|
||||||
char* buf = (char*)hMapFilePtr + destOfs;
|
memcpy(buf,audiobuffer,nsamples*2);
|
||||||
memcpy(buf,audiobuffer,nsamples*4);
|
|
||||||
//extra just in case we had to unexpectedly flush audio and then carry on with some other process... yeah, its rickety.
|
//extra just in case we had to unexpectedly flush audio and then carry on with some other process... yeah, its rickety.
|
||||||
WritePipe(0); //dummy synchronization
|
WritePipe(0); //dummy synchronization
|
||||||
|
|
||||||
|
//wait for frontend to consume data
|
||||||
|
|
||||||
ReadPipe<int>(); //dummy synchronization
|
ReadPipe<int>(); //dummy synchronization
|
||||||
WritePipe(0); //dummy synchronization
|
WritePipe(0); //dummy synchronization
|
||||||
audiobuffer_idx = 0;
|
audiobuffer_idx = 0;
|
||||||
|
|
Loading…
Reference in New Issue