// AudioWorklet, который буферизует входной поток и шлёт чанки по 1280 семплов // (80 мс при 16kHz) в main thread. Любая входная длина допустима — буферизуется. class WakeCaptureProcessor extends AudioWorkletProcessor { constructor() { super() this.buf = new Float32Array(0) this.target = 1280 } process(inputs) { const ch = inputs[0] && inputs[0][0] if (!ch || ch.length === 0) return true const merged = new Float32Array(this.buf.length + ch.length) merged.set(this.buf) merged.set(ch, this.buf.length) this.buf = merged while (this.buf.length >= this.target) { this.port.postMessage(this.buf.slice(0, this.target)) this.buf = this.buf.slice(this.target) } return true } } registerProcessor('wake-capture', WakeCaptureProcessor)