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