snes-fix new bugs in audio

This commit is contained in:
zeromus 2012-12-21 16:13:11 +00:00
parent 8d7da30681
commit f1401a16e1
3 changed files with 11 additions and 7 deletions

View File

@ -414,18 +414,20 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES
int nsamples = brPipe.ReadInt32();
bwPipe.Write(0); //location to store audio buffer in
brPipe.ReadInt32(); //dummy synchronization
bwPipe.Write(0); //dummy synchronization
brPipe.ReadInt32(); //dummy synchronization
if (audio_sample != null)
{
ushort* audiobuffer = ((ushort*)mmvaPtr);
for (int i = 0; i < nsamples; i++)
for (int i = 0; i < nsamples;)
{
ushort left = audiobuffer[i++];
ushort right = audiobuffer[i++];
audio_sample(left, right);
}
}
bwPipe.Write(0); //dummy synchronization
brPipe.ReadInt32(); //dummy synchronization
break;
}
case eMessage.eMessage_snes_cb_scanlineStart:

View File

@ -164,13 +164,15 @@ void FlushAudio()
WritePipe(eMessage_snes_cb_audio_sample);
int nsamples = audiobuffer_idx/2;
int nsamples = audiobuffer_idx;
WritePipe(nsamples);
int destOfs = ReadPipe<int>();
char* buf = (char*)hMapFilePtr + destOfs;
memcpy(buf,audiobuffer,nsamples*4);
char* buf = ReadPipeSharedPtr();
memcpy(buf,audiobuffer,nsamples*2);
//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
//wait for frontend to consume data
ReadPipe<int>(); //dummy synchronization
WritePipe(0); //dummy synchronization
audiobuffer_idx = 0;