Javascript 减少录制的音频.wav文件大小
我正在使用和录制音频。正如我们所知,文件类型将是.wav,并且文件大小非常大。我尝试了一个解决方案,该解决方案是从stackoverflow上先前提出的类似问题中得到的,但仍然适用于1分钟的音频,文件大小>=6.5 MB。我使用的不是两个通道,而是单通道。以下是我在javascript中所做的更改 在recorder.js中->Javascript 减少录制的音频.wav文件大小,javascript,audio-recording,recorder.js,Javascript,Audio Recording,Recorder.js,我正在使用和录制音频。正如我们所知,文件类型将是.wav,并且文件大小非常大。我尝试了一个解决方案,该解决方案是从stackoverflow上先前提出的类似问题中得到的,但仍然适用于1分钟的音频,文件大小>=6.5 MB。我使用的不是两个通道,而是单通道。以下是我在javascript中所做的更改 在recorder.js中-> this.node.onaudioprocess = function(e){ if (!recording) return; var buff
this.node.onaudioprocess = function(e){
if (!recording) return;
var buffer = [];
for (var channel = 0; channel <1; channel++){
buffer.push(e.inputBuffer.getChannelData(channel));
}
worker.postMessage({
command: 'record',
buffer: buffer
});
}
在recorderWorker.js中->
function record(inputBuffer){
for (var channel = 0; channel < 1; channel++){
recBuffers[channel].push(inputBuffer[channel]);
}
recLength += inputBuffer[0].length;
}
function exportWAV(type){
var bufferL = mergeBuffers(recBuffers[0], recLength);
var dataview = encodeWAV(bufferL);
var audioBlob = new Blob([dataview], { type: type });
this.postMessage(audioBlob);
}
function getBuffer(){
var buffers = [];
for (var channel = 0; channel < 1; channel++){
buffers.push(mergeBuffers(recBuffers[channel], recLength));
}
this.postMessage(buffers);
}
function interleave(inputL, inputR){
var length = inputL.length;
var result = new Float32Array(length);
var index = 0,
inputIndex = 0;
while (index < length){
result[index++] = inputL[inputIndex];
//result[index++] = inputR[inputIndex];
inputIndex++;
}
return result;
}
/* channel count */
view.setUint16(22, 1, true);
/* block align (channel count * bytes per sample) */
view.setUint16(32, 2, true);
我尝试使用将其转换为mp3文件类型,但速度很慢,而且我无法使用此功能录制>2分钟的音频
我首先要问的是,我是否因为没有缩小尺寸而做错了什么?第二,还有其他方法可以减小文件的大小吗?我找到了两种方法来缩小导出的wav文件的大小: 初始化新记录器时使用单个通道, rec=新的Recorderinput,{numChannels:1} 或者你可以降低采样率,进一步缩小尺寸,
问题不在于存储容量。问题是,如果多个用户同时在服务器上录制并上载,则上载可能需要更多时间,因为文件的大小会更大。如果更改audioContext.sampleRate,会怎么样?