namespace ytLive.Services.Audio;
///
/// A live audio capture source (TASK 4 ship step 4 seam): produces PCM float
/// chunks. The default implementations wrap NAudio's WASAPI capture (mic) /
/// loopback (desktop/game); the mixer and the tests consume this interface,
/// never NAudio directly. Capture now runs for the app's lifetime so the
/// footer meters stay live in preview — the mixer owns start/stop.
///
public interface IAudioSource : IDisposable
{
/// Starts capturing. Safe to call only once per Stop.
void Start();
/// Stops capturing; a later Start begins a fresh session.
void Stop();
/// Raises once capture is live (right after recording starts).
/// Never raised when Start fails — fires instead.
event Action? Started;
/// Raises each captured chunk (interleaved PCM float, -1..1).
event Action? SampleReady;
/// Raises when capture dies or fails to start (e.g. no device).
event Action? Failed;
}