in src/lib/audio-streamer.ts [102:125]
addPCM16(chunk: Uint8Array) {
// Reset the stream complete flag when a new chunk is added.
this.isStreamComplete = false;
// Process the chunk into a Float32Array
let processingBuffer = this._processPCM16Chunk(chunk);
// Add the processed buffer to the queue if it's larger than the buffer size.
// This is to ensure that the buffer is not too large.
while (processingBuffer.length >= this.bufferSize) {
const buffer = processingBuffer.slice(0, this.bufferSize);
this.audioQueue.push(buffer);
processingBuffer = processingBuffer.slice(this.bufferSize);
}
// Add the remaining buffer to the queue if it's not empty.
if (processingBuffer.length > 0) {
this.audioQueue.push(processingBuffer);
}
// Start playing if not already playing.
if (!this.isPlaying) {
this.isPlaying = true;
// Initialize scheduledTime only when we start playing
this.scheduledTime = this.context.currentTime + this.initialBufferTime;
this.scheduleNextBuffer();
}
}