Files
sharpemu/src/SharpEmu.HLE/Host/IHostAudioStream.cs
T
Berk 2b6bd5a532 Sdl backend (#670)
* [audio] added sdl audio backend and in-tree atrac9 decoder

* [input] replaced per-platform pad readers with sdl gamepad input

* [video] added sdl window and host display plumbing

* [gui] added host display options and per-game render settings

* [bink] synced host movie playback to the guest audio clock

* [cpu] hooked windows write faults into guest image tracking

* [perf] added guest and render profiling, reserved host cpu lanes

* [kernel] fixed stale pthread mutex handle alias

* [host] wired the sdl session, save-data paths and project references

* [audio] hoisted ajm trace stackalloc out of its loop

* [video] Add guest image sync setting

* [build] Strip native symbols

* reuse
2026-07-28 03:33:26 +03:00

32 lines
1.3 KiB
C#

// Copyright (C) 2026 SharpEmu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
namespace SharpEmu.HLE.Host;
/// <summary>
/// One open host audio output stream. Submissions are interleaved stereo 16-bit PCM at
/// the sample rate the stream was opened with.
/// </summary>
public interface IHostAudioStream : IDisposable
{
/// <summary>
/// Submits one buffer. May block briefly while the device drains its queue (this is
/// what paces the guest's audio loop); returns false when the stream cannot accept
/// audio, in which case the caller paces the guest itself.
/// </summary>
bool Submit(ReadOnlySpan<byte> stereoPcm16);
/// <summary>
/// Audio already handed to the device and not yet played, in milliseconds —
/// the cushion protecting playback from a late submission. Zero means the
/// device has run dry and is emitting silence.
///
/// Callers that pace the guest against an emulated hardware queue need this:
/// pacing purely on wall clock releases exactly one buffer per buffer-period
/// and so keeps the cushion at zero, which turns any scheduling jitter into
/// an audible dropout. Returns -1 when the backend cannot report a depth, in
/// which case callers must fall back to their own pacing.
/// </summary>
int QueuedMilliseconds => -1;
}