#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();
}