Files
ArtPlayer/packages/artplayer-proxy-mediabunny/src/audio-clock.ts
T

21 lines
936 B
TypeScript

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 }
}