UNPKG

alexa-voice-service

Version:
40 lines (31 loc) 1 kB
'use strict'; /** * @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;