70 lines
1.3 KiB
C#
70 lines
1.3 KiB
C#
using System;
|
|
using BizHawk.Emulation.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES
|
|
{
|
|
public partial class QuickNES : ISoundProvider
|
|
{
|
|
private short[] MonoBuff = new short[1024];
|
|
private short[] StereoBuff = new short[2048];
|
|
private int NumSamples = 0;
|
|
|
|
public bool CanProvideAsync
|
|
{
|
|
get { return false; }
|
|
}
|
|
|
|
public void GetSamplesSync(out short[] samples, out int nsamp)
|
|
{
|
|
samples = StereoBuff;
|
|
nsamp = NumSamples;
|
|
}
|
|
|
|
public void DiscardSamples()
|
|
{
|
|
// Nothing to do
|
|
}
|
|
|
|
public void SetSyncMode(SyncSoundMode mode)
|
|
{
|
|
if (mode == SyncSoundMode.Async)
|
|
{
|
|
throw new NotSupportedException("Async mode is not supported.");
|
|
}
|
|
}
|
|
|
|
public SyncSoundMode SyncMode
|
|
{
|
|
get { return SyncSoundMode.Sync; }
|
|
}
|
|
|
|
public void GetSamplesAsync(short[] samples)
|
|
{
|
|
throw new InvalidOperationException("Async mode is not supported.");
|
|
}
|
|
|
|
private void InitAudio()
|
|
{
|
|
LibQuickNES.ThrowStringError(QN.qn_set_sample_rate(Context, 44100));
|
|
}
|
|
|
|
private void DrainAudio()
|
|
{
|
|
NumSamples = QN.qn_read_audio(Context, MonoBuff, MonoBuff.Length);
|
|
unsafe
|
|
{
|
|
fixed (short* _src = &MonoBuff[0], _dst = &StereoBuff[0])
|
|
{
|
|
short* src = _src;
|
|
short* dst = _dst;
|
|
for (int i = 0; i < NumSamples; i++)
|
|
{
|
|
*dst++ = *src;
|
|
*dst++ = *src++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|