背景:我正在开发一个兼容WebAudio的MusicFolder 2版本,这是一款无间隙播放功能的媒体播放器。它需要支持非常大的音频文件(小时)和混音,这些音频文件被分成单独的音频文件,需要端到端播放,音轨之间没有任何明显的音频丢失。
我尝试过使用decodeAudioData和两个轮流的AudioBufferSourceNode实例,但是大型音频文件的内存消耗太高,特别是因为各种Webaudio实现无法进行垃圾收集(已知错误)。
作为替代方案,我已经围绕HTMLMediaElement及其相应的源AudioNode实现了一个版本,但问题在于我无法准确地为无间隙播放安排音频元素的开始。我尝试了各种方法,比如在GainNode设置为0的第二个音频元素上调用.play(),然后在另一个完成播放(“结束”事件)然后将.currentTime设置为0时切换到该值,但是甚至寻找已经播放的元素为0需要太长时间。
有没有办法加快.play()或寻求,或安排其中任何一个到一个确切的时间?
在App Store的生产实现中,我使用iOS的原生AVAudioPlayer,它具有“prepareToPlay”功能,可以在前面调用,并确保在调用“play”时立即回放。