|
const MIN_CHUNK_SIZE = 512; |
|
let globalPointer = 0; |
|
let globalBuffer = new Float32Array(MIN_CHUNK_SIZE); |
|
|
|
class VADProcessor extends AudioWorkletProcessor { |
|
process(inputs, outputs, parameters) { |
|
const buffer = inputs[0][0]; |
|
if (!buffer) return; |
|
|
|
if (buffer.length > MIN_CHUNK_SIZE) { |
|
|
|
this.port.postMessage({ buffer }); |
|
} else { |
|
const remaining = MIN_CHUNK_SIZE - globalPointer; |
|
if (buffer.length >= remaining) { |
|
|
|
globalBuffer.set(buffer.subarray(0, remaining), globalPointer); |
|
|
|
|
|
this.port.postMessage({ buffer: globalBuffer }); |
|
|
|
|
|
globalBuffer.fill(0); |
|
globalBuffer.set(buffer.subarray(remaining), 0); |
|
globalPointer = buffer.length - remaining; |
|
} else { |
|
|
|
globalBuffer.set(buffer, globalPointer); |
|
globalPointer += buffer.length; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
} |
|
|
|
registerProcessor("vad-processor", VADProcessor); |
|
|