in src/frontends/live_api_react/frontend/src/utils/audio-streamer.ts [77:112]
addPCM16(chunk: Uint8Array) {
const float32Array = new Float32Array(chunk.length / 2);
const dataView = new DataView(chunk.buffer);
for (let i = 0; i < chunk.length / 2; i++) {
try {
const int16 = dataView.getInt16(i * 2, true);
float32Array[i] = int16 / 32768;
} catch (e) {
console.error(e);
// console.log(
// `dataView.length: ${dataView.byteLength}, i * 2: ${i * 2}`,
// );
}
}
const newBuffer = new Float32Array(
this.processingBuffer.length + float32Array.length,
);
newBuffer.set(this.processingBuffer);
newBuffer.set(float32Array, this.processingBuffer.length);
this.processingBuffer = newBuffer;
while (this.processingBuffer.length >= this.bufferSize) {
const buffer = this.processingBuffer.slice(0, this.bufferSize);
this.audioQueue.push(buffer);
this.processingBuffer = this.processingBuffer.slice(this.bufferSize);
}
if (!this.isPlaying) {
this.isPlaying = true;
// Initialize scheduledTime only when we start playing
this.scheduledTime = this.context.currentTime + this.initialBufferTime;
this.scheduleNextBuffer();
}
}