gpt4 book ai didi

audio - Javascript 中的 Web 音频 API 下采样 44.1 khz

转载 作者:行者123 更新时间:2023-12-01 09:02:41 24 4
gpt4 key购买 nike

我正在使用 RecorderJS 来录制来自用户的麦克风流。默认导出为 44.1 kHz、16 位的 WAV 文件。无论如何我可以将其降采样到 11kHz 或 16kHz 而不会听起来很奇怪吗?
无论如何,我可以仅使用 javascript 从 Web Audio API getUserMedia 流中获取 16 位 16khz WAV 文件吗?

我正在尝试减小文件大小,从而为用户节省大量带宽。谢谢。

最佳答案

编辑:还有一件事,您也可以只发送一个 channel 而不是两个 channel ......
我不确定这是否是正确的方法,但我是通过对从麦克风接收到的数据进行插值来做到的,
我猜,你正在从麦克风中捕获你的数据,就像这样,

this.node.onaudioprocess = function(e){
if (!recording) return;
worker.postMessage({
command: 'record',
buffer: [
e.inputBuffer.getChannelData(0),
e.inputBuffer.getChannelData(1)
]
});
}
现在将其修改为
var oldSampleRate = 44100, newSampleRate = 16000;
this.node.onaudioprocess = function(e){

var leftData = e.inputBuffer.getChannelData(0);
var rightData = e.inputBuffer.getChannelData(1);
leftData = interpolateArray(leftData, leftData.length * (newSampleRate/oldSampleRate) );
rightData = interpolateArray(rightData, rightData.length * (newSampleRate/oldSampleRate) );
if (!recording) return;
worker.postMessage({
command: 'record',
buffer: [
leftData,
rightData
]
});
}

function interpolateArray(data, fitCount) {
var linearInterpolate = function (before, after, atPoint) {
return before + (after - before) * atPoint;
};

var newData = new Array();
var springFactor = new Number((data.length - 1) / (fitCount - 1));
newData[0] = data[0]; // for new allocation
for ( var i = 1; i < fitCount - 1; i++) {
var tmp = i * springFactor;
var before = new Number(Math.floor(tmp)).toFixed();
var after = new Number(Math.ceil(tmp)).toFixed();
var atPoint = tmp - before;
newData[i] = linearInterpolate(data[before], data[after], atPoint);
}
newData[fitCount - 1] = data[data.length - 1]; // for new allocation
return newData;
};

关于audio - Javascript 中的 Web 音频 API 下采样 44.1 khz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27411835/

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