namespace ytLive.Services.Audio; /// Seam over the TRAX background-music player () so the /// toggle/status-light logic is testable without a real audio device. public interface ITraxPlayer : IDisposable { event Action? PlaybackEnded; string? TrackName { get; } bool IsPlaying { get; } /// The player's OWN measured output level (0…1). A play glyph can lie — an open file /// with a dead decoder still says "playing" — so the dock's TRAX ladder shows sound, not state. float Level { get; } float LocalGain { get; set; } /// The creator's TRAX level (1 = the bed's fixed design level). Separate from /// , which follows the desktop mute; the dock's fader moves this. float UserGain { get; set; } void Load(string path); void Play(); void Pause(); }