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