alexa-voice-service
Version:
Alexa Voice Service wrapper for the browser.
40 lines (31 loc) • 1 kB
JavaScript
;
/**
* @credit http://stackoverflow.com/a/26245260
*/
function downsampleBuffer(buffer, inputSampleRate, outputSampleRate) {
if (inputSampleRate === outputSampleRate) {
return buffer;
}
if (inputSampleRate < outputSampleRate) {
throw new Error('Output sample rate must be less than input sample rate.');
}
const sampleRateRatio = inputSampleRate / outputSampleRate;
const newLength = Math.round(buffer.length / sampleRateRatio);
let result = new Float32Array(newLength);
let offsetResult = 0;
let offsetBuffer = 0;
while (offsetResult < result.length) {
let nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);
let accum = 0;
let 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;
}
module.exports = downsampleBuffer;