gpt4 book ai didi

javascript - 从麦克风读取到 .wav

转载 作者:行者123 更新时间:2023-11-29 21:59:34 25 4
gpt4 key购买 nike

我正在从麦克风读取并将录音保存在 .wav 文件中。我做了很多研究,这是最好的解决方案: link

我的问题是 44 在

var buffer = new ArrayBuffer(44 + interleaved.length * 2);

对应于。

我当时的理解是,我们创建了一个 Buffer,其中记录保存为 i Byte 格式。但是 44 对应的是什么以及为什么 interleaved.length*2 虽然是交错的对应左右声道???

最佳答案

这与数据的格式有关。 ArrayBuffer 用于存储原始字节。这个问题是关于 WAV format

44 个字节用于 header ,如下所示:

writeUTFBytes(view, 0, 'RIFF');              //Magic word identifying the stream (4 bytes)
view.setUint32(4, 44 + interleaved.length * 2, true); //Size of stream in bytes (4 bytes)
writeUTFBytes(view, 8, 'WAVE'); //Another magic word (4 bytes)
// FMT sub-chunk
writeUTFBytes(view, 12, 'fmt '); //format header (4bytes)
view.setUint32(16, 16, true); //4 bytes size of format (16 bytes)
view.setUint16(20, 1, true); //2 bytes audio format
// stereo (2 channels)
view.setUint16(22, 2, true); //2 bytes apparently number of channels
view.setUint32(24, 44100, true); //4 bytes sample rate
view.setUint32(28, 44100 * 4, true); //4 bytes byte rate
view.setUint16(32, 4, true); //2 bytes block align
view.setUint16(34, 16, true); //2 bytes bits per sample
// data sub-chunk
writeUTFBytes(view, 36, 'data'); //'data' == 4 bytes
view.setUint32(40, interleaved.length * 2, true);

然后我们来到实际数据,它是 interleaved.length of Int16,每个项目 2 个字节..

// write the PCM samples
var lng = interleaved.length;
var index = 44;
var volume = 1;
for (var i = 0; i < lng; i++){
view.setInt16(index, interleaved[i] * (0x7FFF * volume), true);
index += 2;
}

关于javascript - 从麦克风读取到 .wav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24567808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com