| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /**
- * AudioWorklet 处理器
- * 用于高性能实时音频采集
- */
- class AudioProcessor extends AudioWorkletProcessor {
- process(inputs, outputs, parameters) {
- const input = inputs[0];
-
- if (input && input[0]) {
- // 获取单声道音频数据
- const inputChannel = input[0];
-
- // 转换为16位PCM格式
- const pcmData = this.floatTo16BitPCM(inputChannel);
-
- // 发送到主线程
- this.port.postMessage(pcmData);
- }
-
- // 返回true表示继续处理
- return true;
- }
-
- /**
- * 将Float32Array转换为Int16Array (PCM格式)
- */
- floatTo16BitPCM(float32Array) {
- const int16Array = new Int16Array(float32Array.length);
-
- for (let i = 0; i < float32Array.length; i++) {
- // 限制范围在 [-1, 1]
- const s = Math.max(-1, Math.min(1, float32Array[i]));
- // 转换为16位整数
- int16Array[i] = s < 0 ? s * 0x8000 : s * 0x7FFF;
- }
-
- return int16Array;
- }
- }
- registerProcessor('audio-processor', AudioProcessor);
|