|
|
@@ -110,6 +110,7 @@ export default class NlsAsr extends BaseEvent {
|
|
|
this.source.connect(this.processor);
|
|
|
const sampleRate = this.audioContext.sampleRate;
|
|
|
let capturedChunks = 0;
|
|
|
+ let silenceWarned = false;
|
|
|
console.log(
|
|
|
`[nls] 开始采集:AudioContext=${this.audioContext.state} 采样率=${sampleRate}Hz ` +
|
|
|
`processor 缓冲=${this.processor.bufferSize}`
|
|
|
@@ -154,6 +155,20 @@ export default class NlsAsr extends BaseEvent {
|
|
|
}
|
|
|
const rms = Math.sqrt(sum / channel.length);
|
|
|
console.log(`[nls] 采集电平:峰值=${peak.toFixed(4)} RMS=${rms.toFixed(4)}`);
|
|
|
+ // 连续 3 秒全静音 → 直接把「当前用的是哪个输入设备」摊开说清楚。
|
|
|
+ // 实测踩过:Windows 上装了 Steam 的话,默认输入设备可能是
|
|
|
+ // **Steam Streaming Microphone**(虚拟设备,永远输出静音)——
|
|
|
+ // 表现就是 getUserMedia 成功、回调照跑、但电平恒为 0、网关一句都不回。
|
|
|
+ if (peak === 0 && !silenceWarned) {
|
|
|
+ silenceWarned = true;
|
|
|
+ const deviceLabel = this.stream?.getAudioTracks?.()[0]?.label || "(未知设备)";
|
|
|
+ console.warn(
|
|
|
+ `[nls] ⚠️ 连续采集到全静音:当前输入设备是 ${JSON.stringify(deviceLabel)}。\n` +
|
|
|
+ `[nls] 若它不是你正在说话的麦克风(常见的坑:Steam Streaming Microphone 这类**虚拟设备**、\n` +
|
|
|
+ `[nls] 系统静音/隐私开关、被会议软件独占),请在 Windows「声音设置 → 输入」或\n` +
|
|
|
+ `[nls] 浏览器「站点设置 → 麦克风」里换一个真实麦克风后重试。`
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
this.pendingAudio.push(encoded);
|
|
|
};
|