Javascript 从麦克风录制时合并缓冲区并交错
我做了一些关于如何从麦克风录制和保存文件的研究。我找到了一个示例,但并不是所有的函数都解释得很好。如果有人能向我解释这两个函数到底做了什么Javascript 从麦克风录制时合并缓冲区并交错,javascript,arrays,buffer,wav,Javascript,Arrays,Buffer,Wav,我做了一些关于如何从麦克风录制和保存文件的研究。我找到了一个示例,但并不是所有的函数都解释得很好。如果有人能向我解释这两个函数到底做了什么 function mergeBuffers(channelBuffer, recordingLength){ var result = new Float32Array(recordingLength); var offset = 0; var lng = channelBuffer.length; for (var i = 0; i < lng; i
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;
}
到目前为止,我了解到从源麦克风获得的声音保存在浮点阵列类型的缓冲区中。保存了两个缓冲区,leftChannel和rightChannel,类似于扬声器Left和right
下面是我正在谈论的示例的链接:这两个函数的名称和来源都是不言自明的: mergeBuffers通过连接将多个缓冲区合并为一个缓冲区。channelBuffer是一个包含多个缓冲区的数组,您可以得到一个缓冲区,所有这些缓冲区连接在一起 interleave使用两个缓冲区,并返回一个具有交替的左声道和右声道值的缓冲区,这是立体声的一种非常标准的表示形式
我确实理解,但为什么我要合并缓冲区,为什么我要交错缓冲区??这在你链接的文章中都有解释。录制时会重复调用onaudioprocess处理程序。每次调用它时,它都会为每个通道接收一个缓冲区,该缓冲区包含自第一次记录开始以来的数据,然后是自此后最后一次调用以来的数据。给出的示例代码保存了这些缓冲区,这些缓冲区随后分别左、右合并并交错,因为WAV文件应该具有这些通道。我希望编辑文件下载,而不是在停止录制时自动下载,我希望显示一个链接,这样当用户单击该链接时,记录将打开。怎么做?如果您能提供帮助,这超出了原始问题的范围,您所说的编辑是什么意思?如果您只想将录制结束与保存文件分开,只需删除“单击创建”和“发送”,而是将创建的链接添加到您的页面中的任意位置。