我目前正在开发一种对讲机型环境。现在录制和重新采样音频工作正常(感谢帮助),播放作品..等等。
我的数据来自(WAV-)blob,所以这就是我所做的:
audioPlay(blob)
{
var fileReader = new FileReader();
fileReader.onload = function() {
theContext.decodeAudioData(this.result, function(buffer) {
var source = theContext.createBufferSource();
source.buffer = buffer;
source.connect(theContext.destination);
source.start(0);
});
};
fileReader.readAsArrayBuffer(blob);
}
但是每一个新音频都会增加一个轻微的启动延迟,随着每个新音频的增加而增加。经过一些音频后,延迟增加了近2-3秒。记录没有显示任何延迟,程序流程一直很好。直到.source.start。
有什么想法吗?
答案 0 :(得分:0)
不要为每个样本以0开始播放。而是追踪时间。
if (nextTime == 0) { nextTime = context.currentTime }
source.start(nextTime);
nextTime+=source.buffer.duration;
答案 1 :(得分:0)
Michaela,这听起来更像它可能是源中的一个问题 - 你确定每个传入的blob是正确的(正确的长度,并且在开始时有音频吗?)似乎你可能只是在此结束时将新记录添加到空缓冲区的末尾。除非遇到这个具体问题,否则我会看一下即将发布的音频blob - 由于某些原因,解码可能过于昂贵? (即,如果你有2-3秒的累积延迟,你应该能够通过记录来判断延迟是在接收数据,解码它还是在缓冲区本身。