1
0
Fork 0
security-lab/public/recorderWorklet.js
2026-04-04 21:23:18 +03:00

28 lines
936 B
JavaScript

/**
* AudioWorkletProcessor для записи PCM-данных.
* Отправляет Float32Array-чанки на главный поток через port.
*/
class RecorderProcessor extends AudioWorkletProcessor {
constructor() {
super();
this._active = true;
this.port.onmessage = (e) => {
if (e.data === 'stop') this._active = false;
};
}
process(inputs) {
if (!this._active) return false; // выгружаем процессор
const input = inputs[0];
if (input && input.length > 0) {
// Копируем каналы — данные валидны только внутри process()
const channels = input.map(ch => new Float32Array(ch));
// Transferable — избегаем лишних копий
this.port.postMessage(channels, channels.map(c => c.buffer));
}
return true;
}
}
registerProcessor('recorder-processor', RecorderProcessor);