refactor(mediabunny): [PKG-MB-06] own audio clocks, buffers and context lifecycle

This commit is contained in:
Harvey Zhao committed 2026-09-12 20:21:25 +08:00
1 parent 9d037dcbf9
commit ccee9157a7
30 files changed
+16182 -736

No files matched your search

@@ -0,0 +1,20 @@
export interface AudioClock {
audioContext: AudioContext | null
paused: boolean
audioContextStartTime: number
playbackTimeAtStart: number
playbackRate: number
}
export function mediaTime(clock: AudioClock): number {
if (clock.paused || !clock.audioContext)
return clock.playbackTimeAtStart
return (clock.audioContext.currentTime - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart
}
export function bufferTiming(clock: AudioClock, timestamp: number, duration: number, now: number) {
const startAt = clock.audioContextStartTime + (timestamp - clock.playbackTimeAtStart) / clock.playbackRate
const endAt = startAt + duration / clock.playbackRate
const endMediaTime = (endAt - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart
return { startAt: Math.max(startAt, now), offset: startAt < now ? (now - startAt) * clock.playbackRate : null, endMediaTime }
}