File size: 1,034 Bytes
bc36801 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/**
* AudioWorklet Processor for low-latency audio capture
* Runs in a separate audio thread for minimal latency
*/
class AudioProcessor extends AudioWorkletProcessor {
constructor() {
super();
this.bufferSize = 512; // Send audio every ~32ms at 16kHz
this.buffer = [];
}
process(inputs, outputs, parameters) {
const input = inputs[0];
if (input.length > 0) {
const channelData = input[0];
// Accumulate samples
for (let i = 0; i < channelData.length; i++) {
this.buffer.push(channelData[i]);
}
// Send when we have enough
while (this.buffer.length >= this.bufferSize) {
const chunk = this.buffer.splice(0, this.bufferSize);
this.port.postMessage({
audio: new Float32Array(chunk)
});
}
}
return true; // Keep processor alive
}
}
registerProcessor('audio-processor', AudioProcessor);
|