Readonlychannelthe underlying voice, for underrun reports and the other things Playable has no word for
Optional completion hook, matching HTMLAudioElement.onended. Backends without an end event can omit it; single-track Music remains fully usable there.
seconds of the source, Infinity when it has no end
speed and pitch together, matching HTMLAudioElement.playbackRate; 1 is unchanged
speed and pitch together, matching HTMLAudioElement.playbackRate; 1 is unchanged
A
BlockSourcebehind thePlayablesurface, soMusicandOrchestratorcan play a synthesised stream without knowing it is one. The behavioursHTMLAudioElementleaves implicit, decided here once:currentTimereads the playhead and moves it by seeking the source; while a source loops it stays inside the loop region, and once a source that does not loop has ended it holds the duration. An endless source reportsInfinityforduration.playbackRateis supported by resampling: speed and pitch change together, from the next queued chunk (up to the lookahead later).onendedfires once when a source that does not loop plays out or an endless source reachesendAfterSeconds; a looping source never fires it.play()resumes a suspended context first, which a browser only allows after a gesture.Example