voice-stream
Version:
A powerful React hook for real-time voice streaming, designed for AI-powered applications. Perfect for real-time transcription, voice assistants, and audio processing with features like silence detection and configurable audio processing.
35 lines (34 loc) • 1.1 kB
text/typescript
export const downsampleBuffer = (
buffer: Float32Array,
sampleRate: number,
outSampleRate: number
): Int16Array => {
if (outSampleRate === sampleRate) {
const result = new Int16Array(buffer.length);
for (let i = 0; i < buffer.length; i++) {
const s = Math.max(-1, Math.min(1, buffer[i]));
result[i] = s < 0 ? s * 0x8000 : s * 0x7fff;
}
return result;
}
const sampleRateRatio = sampleRate / outSampleRate;
const newLength = Math.round(buffer.length / sampleRateRatio);
const result = new Int16Array(newLength);
let offsetResult = 0;
let offsetBuffer = 0;
while (offsetResult < newLength) {
const nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio);
let accum = 0;
let count = 0;
for (let i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) {
accum += buffer[i];
count++;
}
const avg = accum / count;
const s = Math.max(-1, Math.min(1, avg));
result[offsetResult] = s < 0 ? s * 0x8000 : s * 0x7fff;
offsetResult++;
offsetBuffer = nextOffsetBuffer;
}
return result;
};