我目前正在开发一个使用 AudioContext api 来控制视频剪辑和背景音频的音频的应用程序。我们想使用 AudioContext(因此MediaElementAudioSourceNodes
),以便我们可以通过编程方式调整音频。
因为应用程序正在将媒体同步到时间线,这通常意味着调整playbackRate
媒体元素以赶上。在 Chrome 中,这可以正常工作:您进行调整playbackRate
,媒体会相应地加速或减速。现在在 Safari 中,通过 a 管道传输的任何音频MediaElementAudioSourceNode
都不会尊重更改的媒体playbackRate
,以正常速度播放音频,然后会在几秒钟后喷出。(Safari 音频将尊重playbackRate
直接从媒体元素播放的时间,特别是没有音高校正,但这是一个单独的已知问题)
这是一个复制问题的 CodeSandbox。页面上的第一个播放器将直接播放来自 的音频HTMLMediaElement
,而第二个播放器将通过MediaElementAudioSourceNode
.
我们尝试了其他几种途径,例如使用AudioBufferSourceNode
音频源,但由于我们经常使用的剪辑大小,这不是理想的途径。如果可能的话,我们希望仍然AudioContext
为 Chrome 和 Safari 使用 api。