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(); 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:

View File

@ -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;