合并缓冲和交错从麦克风录制的同时

merging buffers and interleaving the while recording from a microphone

本文关键字:麦克风 缓冲 合并      更新时间:2023-09-26

我对如何从麦克风录制并保存文件做了一些研究。我找到了一个例子,但并不是所有的函数都解释得很好。如果有人能给我解释一下这两个函数到底是做什么的?

function mergeBuffers(channelBuffer, recordingLength){
var result = new Float32Array(recordingLength);
var offset = 0;
var lng = channelBuffer.length;
for (var i = 0; i < lng; i++){
var buffer = channelBuffer[i];
result.set(buffer, offset);
offset += buffer.length;
}
    return result;
   }
这是第二个函数:
function interleave(leftChannel, rightChannel){
var length = leftChannel.length + rightChannel.length;
var result = new Float32Array(length);
var inputIndex = 0;
for (var index = 0; index < length; ){
 result[index++] = leftChannel[inputIndex];
 result[index++] = rightChannel[inputIndex];
 inputIndex++;
}
return result;
}

到目前为止,我已经理解了从源(麦克风)获得的声音保存在float数组类型的缓冲区中。保存了两个缓冲区,leftChannel和rightChannel类似于扬声器(左和右)这里是我正在谈论的例子的链接:http://typedarray.org/from-microphone-to-wav-with-getusermedia-and-web-audio/

这两个函数的名称和来源都是不言自明的:

  • mergeBuffers通过连接将多个缓冲区合并为一个。

  • channelBuffer是一个包含多个缓冲区的数组,您将得到一个将所有这些缓冲区连接在一起的单个缓冲区。
  • interleave接受两个缓冲区,并返回一个具有交替左、右通道值的缓冲区,这是一个非常标准的立体声表示。