commodore64: slightly better sound sampling routine for non-sync provider, placeholder until I can get the resampler to work

This commit is contained in:
saxxonpike 2012-12-03 06:47:14 +00:00
parent be37d1dc53
commit 0191b1e507
3 changed files with 26 additions and 8 deletions

View File

@ -17,12 +17,30 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
public void GetSamples(short[] samples)
{
bool overrun = false;
uint count = (uint)samples.Length;
for (uint i = 0; i < count; i++)
uint overrunOffset;
if (bufferIndex == 0)
overrunOffset = bufferLength - 1;
else
overrunOffset = bufferIndex - 1;
uint i = 0;
while (i < count)
{
samples[i] = buffer[bufferReadOffset];
if (bufferReadOffset != bufferIndex)
bufferReadOffset++;
if (bufferReadOffset == bufferIndex)
overrun = true;
if (!overrun)
{
samples[i++] = buffer[bufferReadOffset++];
samples[i++] = buffer[bufferReadOffset++];
}
else
{
samples[i++] = buffer[overrunOffset];
samples[i++] = buffer[overrunOffset];
}
if (bufferReadOffset == bufferLength)
bufferReadOffset = 0;
}

View File

@ -571,11 +571,10 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
{
switch (newRegion)
{
case Region.NTSC: cyclesPerSec = 14318181 / 14; break;
case Region.PAL: cyclesPerSec = 17734472 / 18; break;
case Region.NTSC: cyclesPerSec = 14318181 / 14; bufferLength = (newSampleRate / 60) * 4; break;
case Region.PAL: cyclesPerSec = 17734472 / 18; bufferLength = (newSampleRate / 50) * 4; break;
}
bufferFrequency = cyclesPerSec / newSampleRate;
bufferLength = newSampleRate * 2;
buffer = new short[bufferLength];
waveformTable = newWaveformTable;

View File

@ -600,6 +600,7 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
{
uint pixel;
uint pixelData;
bool renderEnabled = bufRect.Contains(bufPoint);
for (int i = 0; i < 4; i++)
{
@ -621,7 +622,7 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
pixel = pixelBuffer[pixelBufferIndex];
// plot pixel if within viewing area
if (bufRect.Contains(bufPoint))
if (renderEnabled)
{
buf[bufOffset] = palette[pixel];
bufOffset++;