53 lines
1.3 KiB
C#
53 lines
1.3 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
|
|
{
|
|
unsafe partial class MelonDS : ISoundProvider
|
|
{
|
|
private readonly SpeexResampler _resampler;
|
|
|
|
public bool CanProvideAsync => false;
|
|
|
|
public SyncSoundMode SyncMode => SyncSoundMode.Sync;
|
|
|
|
public void DiscardSamples()
|
|
{
|
|
_DiscardSamples();
|
|
}
|
|
|
|
public void GetSamplesAsync(short[] samples)
|
|
{
|
|
throw new InvalidOperationException();
|
|
}
|
|
|
|
public void GetSamplesSync(out short[] samples, out int nsamp)
|
|
{
|
|
nsamp = GetSampleCount();
|
|
samples = new short[nsamp * 2]; //*2 for stereo sound
|
|
fixed (short* data = samples)
|
|
{
|
|
GetSamples(data, nsamp);
|
|
}
|
|
// BizHawk requires a sample rate of 44100 Hz.
|
|
_resampler.EnqueueSamples(samples, nsamp);
|
|
_resampler.GetSamplesSync(out samples, out nsamp);
|
|
}
|
|
|
|
public void SetSyncMode(SyncSoundMode mode)
|
|
{
|
|
if (mode == SyncSoundMode.Async)
|
|
throw new InvalidOperationException();
|
|
}
|
|
|
|
[DllImport(dllPath)]
|
|
private static extern int GetSampleCount();
|
|
[DllImport(dllPath)]
|
|
private static extern void GetSamples(short* data, int count);
|
|
[DllImport(dllPath, EntryPoint = "DiscardSamples")]
|
|
private static extern void _DiscardSamples();
|
|
}
|
|
}
|