gpt4 book ai didi

javascript - HTML5 以低 kbps 录制音频

转载 作者:太空狗 更新时间:2023-10-29 14:05:11 26 4
gpt4 key购买 nike

我使用 getUserMedia() 做了一个录音机。并使用 Recorder.js 保存文件

但输出文件比我希望的要重得多。

一段 4 分钟的录音大约有 40mb。而且我无法将其发送到我的服务器。如果是这样,它将崩溃。

所以,我搜索了如何降低录制 kbps。但我什么也没找到。只是一些 Flash 解决方案。但是这些不适合我的项目。

所以,我的问题是,是否可以使用 getUserMedia() 降低音频记录的 kbps?

最佳答案

在我的例子中,Chrome 以 96kHz 录制音频,而 Firefox 以 44.1kHz 录制音频,这会产生巨大的 WAV 文件。我在 recorderWorker.js 中实现了一个下采样功能,您可以在其中选择您想要的采样率,例如 16000。

function downsampleBuffer(buffer, rate) {
if (rate == sampleRate) {
return buffer;
}
if (rate > sampleRate) {
throw "downsampling rate show be smaller than original sample rate";
}
var sampleRateRatio = sampleRate / rate;
var newLength = Math.round(buffer.length / sampleRateRatio);
var result = new Float32Array(newLength);
var offsetResult = 0;
var offsetBuffer = 0;
while (offsetResult < result.length) {
var nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);
var accum = 0, count = 0;
for (var i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {
accum += buffer[i];
count++;
}
result[offsetResult] = accum / count;
offsetResult++;
offsetBuffer = nextOffsetBuffer;
}
return result;
}

我在导出 wav 文件时调用它:

function exportWAV(rate, type) {
var bufferL = mergeBuffers(recBuffersL, recLength);
var bufferR = mergeBuffers(recBuffersR, recLength);
var interleaved = interleave(bufferL, bufferR);
var downsampledBuffer = downsampleBuffer(interleaved, rate);
var dataview = encodeWAV(rate, downsampledBuffer, false);
var audioBlob = new Blob([ dataview ], {
type : type
});

this.postMessage(audioBlob);
}

关于javascript - HTML5 以低 kbps 录制音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348813/

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