namespace BizHawk.Emulation.Common
{
public enum SyncSoundMode
{
Sync, Async
}
///
/// This service provides the ability to output sound from the client,
/// If available the client will provide sound output
/// If unavailable the client will fallback to a default sound implementation
/// that generates empty samples (silence)
///
public interface ISoundProvider : IEmulatorService
{
///
/// Gets a value indicating whether a core can provide Async sound
///
bool CanProvideAsync { get; }
///
/// Sets sync or async sound mode,
/// Sync should be the default mode if not set
/// All implementations must provide sync
/// If a core can not provide async sound and the mode is set to sync,
/// an NotSupportedException should be thrown
///
void SetSyncMode(SyncSoundMode mode);
///
/// Gets which mode the sound provider is currently in
///
SyncSoundMode SyncMode { get; }
///
/// Provides samples in sync mode
/// If the core is not in sync mode, this should throw an InvalidOperationException
///
void GetSamplesSync(out short[] samples, out int nsamp);
///
/// Provides samples in async mode
/// If the core is not in async mode, this should throw an InvalidOperationException
///
void GetSamplesAsync(short[] samples);
///
/// Discards stuff, is there anything more to say here?
///
void DiscardSamples();
}
}