| 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); |
|
|