准确排列AudioSourceNodes以进行播放

时间:2017-03-31 23:05:42

标签: javascript web-audio

我有各种需要在浏览器中播放的语音录音。每个录音分为10个文件;每个片段使用Opus格式进行编码。

需要无缝播放,因此我使用以下代码安排每个const uriArray = [{ index: 5, uri: '.../test001.opus'}, { index: 1, uri: '.../test001.opus' }, ...] const currentTime = this.gainNode.context.currentTime; const time = Date.now(); getSounds(uriArray).subscribe( next => { this.gainNode.context.decodeAudioData(next.data).then(decodedData => { // Simple wrapper for AudioBufferNodes const sound = new SoundPart(decodedData, this.gainNode, next.index); object.data[next.index] = sound; console.info(sound.buffer.duration); sound.play(currentTime + 0.25 + ((Date.now() - time) / 1000.0) + (next.index * sound.buffer.duration), 0) }); }, error => { console.log(error); console.log("An error occured"); } );

onHandleIntent

我基本上获取一组代表录制部分的文件,并根据预先指定的索引安排它们,同时考虑实际下载文件所需的时间。结果很接近:节点一个接一个地播放,但每个节点之间存在一些差距。在Chrome上,某些节点之间没有间隙,而其他节点则没有。在Firefox上,存在明显的差距。此外,似乎Firefox报告缓冲区的持续时间与Chrome不同,这就是为什么差距更明显。

我有什么遗失的吗?无缝播放是一回事,但我怎样才能确定它在浏览器中是否一致?

1 个答案:

答案 0 :(得分:0)

第一步是确保上下文的采样率与音频文件的采样率相同。如果费率不相同,音频文件将被重新采样,这可能导致不同的持续时间,从而存在空白。