#nullable enable using T3.Core.Animation; namespace T3.Core.Audio; /// /// Implemented by the [AudioClip] operator so the audio-clip registrar /// () and a future [AudioClipPlayer] can drive it for /// playback. Lives in Core — not the operator package — because the registrar runs editor- and /// player-side while the op is in a dynamically-loaded package, the same reason /// and /// are Core types. /// public interface IAudioClipProvider { /// Timeline placement (TimeRange / LayerIndex / SourceRange). Null before the clip's TimeClip exists. TimeClip? TimeClip { get; } /// When true the clip registers itself for playback with no [AudioClipPlayer] required. bool AutoPlay { get; } /// Full source-file duration in seconds; 0 until known (populated on first playback). Used to /// map the clip's SourceRange onto the waveform image so it isn't stretched. double SourceLengthInSeconds { get; } /// /// Syncs the clip's playback data from its current input values and returns the engine handle. /// Called once per frame by the registrar / player for clips that should sound this frame. /// AudioClipResourceHandle GetResourceHandle(); /// Stamped each frame by whatever drives the clip, for a "not played by anything" status hint. void MarkManaged(); }