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; }