Optionaldestination: AudioNodeReadonlyonfires once when a source that does not repeat has played out, or an endless one reached its limit
Readonlyonfires when the source threw while being read: the voice stops instead of letting the error escape from a timer
Readonlyonfires when the clock passed the end of the queue before the next chunk was ready, with how late it was in seconds
seconds of the source, or Infinity when it has no end
how many times the queue ran dry since the channel was made
starts the source with these parameters, stopping whatever played before
seconds into the source, wrapping inside the loop region while it repeats
the playhead as a source frame, the exact unit a save stores and a restore skips to
queues whatever chunks the lookahead allows; called by the timer and safe to call each frame
moves the playhead, restarting the queue from there
stops the voice, fading out over fadeSeconds first when positive; the playhead is remembered for a later play with the same pos
retunes the playing voice in place: no restart, no seek
The streaming twin of
Channel: it queues short buffers on the audio clock ahead of the playhead from aBlockSourceinstead of owning one decoded buffer, so a long or endless track costs a couple of seconds of memory rather than the whole render. It loops on a region, seeks, retunes volume, pitch and pan, fades an endless source out after a limit, and reportsonUnderrunwhen the clock got ahead of what was queued.Chunks are queued by a timer it runs itself (
pumpMs), so a game that never callsupdate()still hears sound; a timer throttled in a background tab is the reason the lookahead is two seconds. A pitch change applies from the next chunk, up to the lookahead later.Example