【发布时间】:2019-08-02 21:32:49
【问题描述】:
背景:我正在开发 MusicFolder 2 的 WebAudio 兼容版本,这是一款支持无缝播放的媒体播放器。它需要支持非常大的音频文件(小时)和已拆分为单独的音频文件的混音,这些文件需要端到端播放,而轨道之间没有任何明显的音频丢失。
我尝试过轮流使用 decodeAudioData 和两个 AudioBufferSourceNode 实例,但是对于大型音频文件,内存消耗太高,尤其是因为各种 Webaudio 实现无法进行垃圾收集(已知错误)。
作为替代方案,我已经围绕 HTMLMediaElement 及其相应的源 AudioNode 实现了一个版本,但这里的问题是我无法准确地安排音频元素的开始以进行无缝播放。我尝试了各种方法,例如在 GainNode 设置为 0 的第二个音频元素上调用 .play(),然后在另一个完成播放(“结束”事件)后切换到该元素,然后将 .currentTime 设置为 0,但是即使将已经在播放的元素寻找为 0 也需要很长时间。
有什么方法可以加快 .play() 或寻找,或将它们中的任何一个安排到准确的时间?
在App Store的生产实现中,我使用iOS原生的AVAudioPlayer,它有“prepareToPlay”功能,可以预先调用,保证调用“play”时立即播放。
【问题讨论】:
标签: webkit mobile-safari web-audio-api