连接音频 blob

Concatenating audio blobs

我尝试使用 Web RTC experiment by Muaz Khan, but when I play the concatenated audio, the HTML audio element does not show the full length of the audio file and also if you download and play, the issue will persist. I used ffmpeg to concate these blobs, though is there a way which can be used for concatenating audio blobs using the Web RTC js experiment by Muaz Khan. A similar attempt which also did not work out : Combine two audio blob recordings

连接音频 blob

最好的方法是将 blob 转换为 AudioBuffers(使用 FileReader 将 blob 转换为 ArrayBuffer,然后将这些 arrayBuffers 解码为 AudioBuffers)。然后,您可以 merge/combine 多个 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(缓冲区)。我使用 appendBuffer 方法附加多个音频缓冲区。方法如下:

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;

}

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