审查视图

public/audio-processor.js 1.1 KB
202304001 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
// @ts-nocheck
class AudioRecorderProcessor extends AudioWorkletProcessor {
  constructor() {
    super();
    this.isRecording = false;
    this.bufferSize = 2400; // 100ms at 24kHz
    this.currentBuffer = [];

    this.port.onmessage = (event) => {
      if (event.data.command === "START_RECORDING") {
        this.isRecording = true;
      } else if (event.data.command === "STOP_RECORDING") {
        this.isRecording = false;

        if (this.currentBuffer.length > 0) {
          this.sendBuffer();
        }
      }
    };
  }

  sendBuffer() {
    if (this.currentBuffer.length > 0) {
      const audioData = new Float32Array(this.currentBuffer);
      this.port.postMessage({
        eventType: "audio",
        audioData: audioData,
      });
      this.currentBuffer = [];
    }
  }

  process(inputs) {
    const input = inputs[0];
    if (input.length > 0 && this.isRecording) {
      const audioData = input[0];

      this.currentBuffer.push(...audioData);

      if (this.currentBuffer.length >= this.bufferSize) {
        this.sendBuffer();
      }
    }
    return true;
  }
}

registerProcessor("audio-recorder-processor", AudioRecorderProcessor);