BizHawk/BizHawk.Emulation.Common/Interfaces/Services/ISoundProvider.cs

53 lines
1.6 KiB
C#

namespace BizHawk.Emulation.Common
{
public enum SyncSoundMode
{
Sync, Async
}
/// <summary>
/// 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)
/// </summary>
public interface ISoundProvider : IEmulatorService
{
/// <summary>
/// Gets a value indicating whether a core can provide Async sound
/// </summary>
bool CanProvideAsync { get; }
/// <summary>
/// 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
/// </summary>
void SetSyncMode(SyncSoundMode mode);
/// <summary>
/// Gets which mode the sound provider is currently in
/// </summary>
SyncSoundMode SyncMode { get; }
/// <summary>
/// Provides samples in sync mode
/// If the core is not in sync mode, this should throw an InvalidOperationException
/// </summary>
void GetSamplesSync(out short[] samples, out int nsamp);
/// <summary>
/// Provides samples in async mode
/// If the core is not in async mode, this should throw an InvalidOperationException
/// </summary>
void GetSamplesAsync(short[] samples);
/// <summary>
/// Discards stuff, is there anything more to say here?
/// </summary>
void DiscardSamples();
}
}