guarantee that playbackPosition increases monotonically, except when:
allow resetting playbackPosition along (with a flush() or not?) in reset() method
allow compensating for late frames with delay(seconds) method -- injects compensatory silence into the output stream and stops playbackPosition from increasing until the compensation time has passed
use this to avoid constant stop()/start() if we're having frame delays; we'll be "actually" back in sync after the next bufferDuration -- that's about 4-5 frames at 24 fps, 5-6 frames at 30fps, 8-10 frames at 60fps
split out partial interface as TimelineProvider
start()
stop()
reset(newStartTime)
delay(seconds)
playbackPosition
Flash backend retooling:
send the playback state from Flash to JS on every call/callback
flush the output buffer from JS to Flash, if any, on every call/callback (?)
Web Audio backend retooling:
merge the BufferQueue JS class with the BufferQueue AS class; avoid pre-chunking output by using linked list, and output more cleanly without splitting/merging buffers when not needed
Visible API retooling:
playbackPosition
increases monotonically, except when:playbackPosition
along (with aflush()
or not?) inreset()
methoddelay(seconds)
method -- injects compensatory silence into the output stream and stops playbackPosition from increasing until the compensation time has passedstop()
/start()
if we're having frame delays; we'll be "actually" back in sync after the nextbufferDuration
-- that's about 4-5 frames at 24 fps, 5-6 frames at 30fps, 8-10 frames at 60fpsTimelineProvider
start()
stop()
reset(newStartTime)
delay(seconds)
playbackPosition
Flash backend retooling:
Web Audio backend retooling:
BufferQueue
JS class with theBufferQueue
AS class; avoid pre-chunking output by using linked list, and output more cleanly without splitting/merging buffers when not needed