我有各种需要在浏览器中播放的语音录音。每个录音分为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不同,这就是为什么差距更明显。
我有什么遗失的吗?无缝播放是一回事,但我怎样才能确定它在浏览器中是否一致?
答案 0 :(得分:0)
第一步是确保上下文的采样率与音频文件的采样率相同。如果费率不相同,音频文件将被重新采样,这可能导致不同的持续时间,从而存在空白。