audioProcessor.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /**
  2. * AudioWorklet 处理器
  3. * 用于高性能实时音频采集
  4. */
  5. class AudioProcessor extends AudioWorkletProcessor {
  6. process(inputs, outputs, parameters) {
  7. const input = inputs[0];
  8. if (input && input[0]) {
  9. // 获取单声道音频数据
  10. const inputChannel = input[0];
  11. // 转换为16位PCM格式
  12. const pcmData = this.floatTo16BitPCM(inputChannel);
  13. // 发送到主线程
  14. this.port.postMessage(pcmData);
  15. }
  16. // 返回true表示继续处理
  17. return true;
  18. }
  19. /**
  20. * 将Float32Array转换为Int16Array (PCM格式)
  21. */
  22. floatTo16BitPCM(float32Array) {
  23. const int16Array = new Int16Array(float32Array.length);
  24. for (let i = 0; i < float32Array.length; i++) {
  25. // 限制范围在 [-1, 1]
  26. const s = Math.max(-1, Math.min(1, float32Array[i]));
  27. // 转换为16位整数
  28. int16Array[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;
  29. }
  30. return int16Array;
  31. }
  32. }
  33. registerProcessor('audio-processor', AudioProcessor);