commodore64: slightly better sound sampling routine for non-sync provider, placeholder until I can get the resampler to work
This commit is contained in:
parent
be37d1dc53
commit
0191b1e507
|
@ -17,12 +17,30 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
|
||||||
|
|
||||||
public void GetSamples(short[] samples)
|
public void GetSamples(short[] samples)
|
||||||
{
|
{
|
||||||
|
bool overrun = false;
|
||||||
uint count = (uint)samples.Length;
|
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)
|
||||||
if (bufferReadOffset != bufferIndex)
|
overrun = true;
|
||||||
bufferReadOffset++;
|
if (!overrun)
|
||||||
|
{
|
||||||
|
samples[i++] = buffer[bufferReadOffset++];
|
||||||
|
samples[i++] = buffer[bufferReadOffset++];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
samples[i++] = buffer[overrunOffset];
|
||||||
|
samples[i++] = buffer[overrunOffset];
|
||||||
|
}
|
||||||
if (bufferReadOffset == bufferLength)
|
if (bufferReadOffset == bufferLength)
|
||||||
bufferReadOffset = 0;
|
bufferReadOffset = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -571,11 +571,10 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
|
||||||
{
|
{
|
||||||
switch (newRegion)
|
switch (newRegion)
|
||||||
{
|
{
|
||||||
case Region.NTSC: cyclesPerSec = 14318181 / 14; break;
|
case Region.NTSC: cyclesPerSec = 14318181 / 14; bufferLength = (newSampleRate / 60) * 4; break;
|
||||||
case Region.PAL: cyclesPerSec = 17734472 / 18; break;
|
case Region.PAL: cyclesPerSec = 17734472 / 18; bufferLength = (newSampleRate / 50) * 4; break;
|
||||||
}
|
}
|
||||||
bufferFrequency = cyclesPerSec / newSampleRate;
|
bufferFrequency = cyclesPerSec / newSampleRate;
|
||||||
bufferLength = newSampleRate * 2;
|
|
||||||
buffer = new short[bufferLength];
|
buffer = new short[bufferLength];
|
||||||
|
|
||||||
waveformTable = newWaveformTable;
|
waveformTable = newWaveformTable;
|
||||||
|
|
|
@ -600,6 +600,7 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
|
||||||
{
|
{
|
||||||
uint pixel;
|
uint pixel;
|
||||||
uint pixelData;
|
uint pixelData;
|
||||||
|
bool renderEnabled = bufRect.Contains(bufPoint);
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
|
@ -621,7 +622,7 @@ namespace BizHawk.Emulation.Computers.Commodore64.MOS
|
||||||
pixel = pixelBuffer[pixelBufferIndex];
|
pixel = pixelBuffer[pixelBufferIndex];
|
||||||
|
|
||||||
// plot pixel if within viewing area
|
// plot pixel if within viewing area
|
||||||
if (bufRect.Contains(bufPoint))
|
if (renderEnabled)
|
||||||
{
|
{
|
||||||
buf[bufOffset] = palette[pixel];
|
buf[bufOffset] = palette[pixel];
|
||||||
bufOffset++;
|
bufOffset++;
|
||||||
|
|
Loading…
Reference in New Issue