In my case, Chrome records audio at 96 kHz and Firefox at 44.1 kHz, which makes huge WAV files. I implemented the downsampling function inside recorderWorker.js, where you can select the desired sample factor, for example 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; }
and I call it when exporting a wav file:
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); }
ciri-cuervo
source share