连接audioblob

我尝试使用Muaz Khan的Web RTC实验连接audioblob,但是当我播放连接的audio时,HTMLaudio元素不显示audio文件的全长,并且如果您下载并播放,则问题将持续存在。 我用ffmpeg来拼接这些blob,但是有没有一种方法可以用来连接audioblob,使用Muaz Khan的Web RTC js实验 。 类似的尝试也没有解决: 合并两个audioblob录音

最好的方法是将blob转换为AudioBuffers(使用FileReader将blob转换为ArrayBuffer,然后将这些arrayBuffers解码为AudioBuffers)。 然后,您可以合并/合并多个AudioBuffers并获得结果。 以下代码将在这种情况下工作:

var blob="YOUR AUDIO BLOB"; var f = new FileReader(); f.onload = function (e) { audioContext.decodeAudioData(e.target.result, function (buffer) { arrayBuffer.push(buffer); if (arrayBuffer.length > 1) { resultantbuffer = appendBuffer(arrayBuffer[0], arrayBuffer[1]); arrayBuffer = []; arrayBuffer.push(resultantbuffer); } else { resultantbuffer = buffer; } }, function (e) { console.warn(e); }); }; f.readAsArrayBuffer(blob); 

这段代码读取blob并转换成arrayBuffer(e.target.result)并将这些缓冲区解码为AudioBuffers(buffer)。 我使用appendBuffer方法来追加多个audioBuffers。 这里是方法:

 function appendBuffer(buffer1, buffer2) { ///Using AudioBuffer var numberOfChannels = Math.min(buffer1.numberOfChannels, buffer2.numberOfChannels); var tmp = recordingAudioContext.createBuffer(numberOfChannels, (buffer1.length + buffer2.length), buffer1.sampleRate); for (var i = 0; i < numberOfChannels; i++) { var channel = tmp.getChannelData(i); channel.set(buffer1.getChannelData(i), 0); channel.set(buffer2.getChannelData(i), buffer1.length); } return tmp; } 

如果您遇到任何问题,请告诉我。