pcm-recorder-worklet.js 714 B

1234567891011121314151617181920212223242526
  1. /**
  2. * AudioWorklet processor: 收集麦克风 PCM 采样数据
  3. * 运行在音频线程,通过 MessagePort 将 Float32Array 发回主线程
  4. */
  5. class PCMRecorderProcessor extends AudioWorkletProcessor {
  6. constructor() {
  7. super()
  8. this._stopped = false
  9. this.port.onmessage = (e) => {
  10. if (e.data === 'stop') this._stopped = true
  11. }
  12. }
  13. process(inputs) {
  14. if (this._stopped) return false
  15. const input = inputs[0]
  16. if (input && input[0] && input[0].length > 0) {
  17. // 取第一个声道(mono),拷贝一份发给主线程
  18. this.port.postMessage(new Float32Array(input[0]))
  19. }
  20. return true
  21. }
  22. }
  23. registerProcessor('pcm-recorder-processor', PCMRecorderProcessor)