我在我的应用程序中实现了语音转文本功能,并且我正在使用 navigator.mediaDevices.getUserMedia({audio: true}) API 利用连接的耳机麦克风进行语音输入。辅助工具 NVDA 也在后台运行。现在,我面临的问题是,当我用麦克风录音时,麦克风正在拾取 NVDA(非可视桌面访问)语音输出以及用户的声音。由于 NVDA 提供听觉反馈,因此它会与用户的语音输入一起被麦克风捕获,从而导致干扰。
我希望只记录用户语音,同时过滤掉辅助工具(例如:NVDA)的语音输出。
我尝试使用 Angular 中的 deviceId 属性来解决该问题。
Here is the sample code:
const devices = await navigator.mediaDevices.enumerateDevices();
const microphone = devices.find(device =\> device.kind === 'audioinput');
if (microphone) {
const stream = await navigator.mediaDevices.getUserMedia({audio: { deviceId: {exact:
microphone.deviceId}}});
// Use the obtained stream for recording
} else {
console.error('Microphone not found');
}
这可能更多是硬件问题而不是软件问题。
某些计算机具有降噪选项和/或具有过滤器,可以自动忽略来自自身扬声器的音频反馈。
当麦克风处于活动状态时,此类过滤器可以自动应用于音频输出,但您无法通过自己的应用程序或浏览器对此进行控制。您需要进入控制面板或特定制造商的应用程序进行配置。
因此,如果您的计算机没有此类功能,最好的方法可能是使用耳机、外部麦克风和/或扬声器或提供此类功能的外部声卡。