The player exposes a playback-rate attribute and a speed-selector in the controls, and at non-1× the transport clock, GSAP timeline, and native <video> elements all advance at the new rate. But <audio> clips routed through WebAudioTransport keep playing at 1× because AudioBufferSourceNode.playbackRate is never set.
Result: visuals run at 2×, audio plays at 1×, hard desync within seconds.
Fix sketch: thread the transport rate into schedulePlayback, set sourceNode.playbackRate.value, and add a setRate() that updates active sources in place on set-playback-rate.
The player exposes a
playback-rateattribute and a speed-selector in the controls, and at non-1× the transport clock, GSAP timeline, and native<video>elements all advance at the new rate. But<audio>clips routed throughWebAudioTransportkeep playing at 1× becauseAudioBufferSourceNode.playbackRateis never set.Result: visuals run at 2×, audio plays at 1×, hard desync within seconds.
Fix sketch: thread the transport rate into
schedulePlayback, setsourceNode.playbackRate.value, and add asetRate()that updates active sources in place onset-playback-rate.