Microsoft音频堆栈(MAS)提供基于模型的回声取消管道(AUDIO_INPUT_PROCESSING_ENABLE_V2),该管道使用机器学习模型在语音呼叫方案中增强声学回声抑制。 此管道将 默认音频处理管道 中传统的基于 DSP 的回声取消替换为深度学习模型,从而在具有挑战性的声学环境中提供改进的回声抑制。
Important
此功能仅适用于 Windows x64 和 ARM64 平台。
什么是声学回声消除?
声学回声取消(AEC)会删除从设备扬声器播放的音频被麦克风拾取时发生的回声。 在没有 AEC 的情况下,远端参与者将听到自己的声音被回放,语音识别的准确性会降低,因为识别器同时处理回声音频和近端扬声器的声音。
AEC 的工作原理是使用 引用通道 (也称为环回音频)来捕获正在从设备播放的音频。 回声消除器将此参考信号与麦克风输入进行比较,识别出回声成分并将其消除,最终只保留近端扬声器的声音以供语音识别或传输之用。
AEC 在如下方案中至关重要:
- 免手语音助理 - 设备在用户说话时播放提示或音乐。
- 视频会议 - 当声音从扬声器输出时,双方发言。
- 智能扬声器和显示器 - 设备持续输出音频,并且仍必须响应语音命令。
模型化回声消除的工作原理
基于模型的回显取消管道 (AUDIO_INPUT_PROCESSING_ENABLE_V2) 使用机器学习模型来提高回声取消性能:
- 改进了回声抑制 - ML 模型更有效地适应复杂的声学环境,减少传统 DSP 方法可能留下的剩余回声。
- 更好地处理非线性失真 - 模型可以学习和补偿扬声器播放引入的非线性失真,这对于线性 DSP 方法来说很难解决。
注释
AUDIO_INPUT_PROCESSING_ENABLE_V2 与 AUDIO_INPUT_PROCESSING_ENABLE_DEFAULT 是互斥的。 不能合并这些标志。 这些 AUDIO_INPUT_PROCESSING_DISABLE_* 标志不会影响 V2 管道。
语音 SDK 集成
基于模型的回显取消管道可通过语音 SDK 的 AudioProcessingOptions 类获得。 一些关键功能包括:
- 实时麦克风输入和文件输入 - 基于模型的回声取消处理可应用于实时麦克风输入、音频流和基于文件的输入。
-
说话人参考通道 - 可以通过使用
SpeakerReferenceChannel.LastChannel选项为回声消除指定说话人参考通道。
用法示例
以下示例演示如何将基于模型的回显取消管道与不同的输入源一起使用。
注释
回声消除需要麦克风音频和扬声器参考(环回)通道。 从文件读取时,请使用多声道 WAV 文件,其中最后一个通道包含扬声器参考音频,并通过PullAudioInputStream提供。
带拉取流的多通道文件输入
此示例通过拉取音频流读取 2 通道 WAV 文件(1 个麦克风通道 + 1 个扬声器参考通道)。 该 SpeakerReferenceChannel.LastChannel 选项通知 MAS 音频中的最后一个通道包含用于回声消除的与扬声器相关的参考信号。
var speechConfig = SpeechConfig.FromEndpoint(
new Uri("YourSpeechEndpoint"), "YourSpeechKey");
var audioProcessingOptions = AudioProcessingOptions.Create(
AudioProcessingConstants.AUDIO_INPUT_PROCESSING_ENABLE_V2,
PresetMicrophoneArrayGeometry.Mono,
SpeakerReferenceChannel.LastChannel);
// Create a pull stream with 2-channel PCM format
// (1 mic channel + 1 speaker reference channel)
var audioFormat = AudioStreamFormat.GetWaveFormatPCM(
16000, 16, 2);
var pullStream = AudioInputStream.CreatePullStream(
audioFormat, pullStreamCallback);
var audioInput = AudioConfig.FromStreamInput(
pullStream, audioProcessingOptions);
var recognizer = new SpeechRecognizer(speechConfig, audioInput);
默认麦克风输入
在 Windows 操作系统上,指定 SpeakerReferenceChannel.LastChannel 时,语音 SDK 会自动从系统音频环回中收集说话人引用通道。
var speechConfig = SpeechConfig.FromEndpoint(
new Uri("YourSpeechEndpoint"), "YourSpeechKey");
var audioProcessingOptions = AudioProcessingOptions.Create(
AudioProcessingConstants.AUDIO_INPUT_PROCESSING_ENABLE_V2,
PresetMicrophoneArrayGeometry.Mono,
SpeakerReferenceChannel.LastChannel);
var audioInput = AudioConfig.FromDefaultMicrophoneInput(
audioProcessingOptions);
var recognizer = new SpeechRecognizer(speechConfig, audioInput);
要求
若要使用基于模型的回显取消管道,环境必须满足以下要求:
-
Platform - Windows x64 或 ARM64。 请将项目的平台目标设置为
x64或ARM64,而不是Any CPU。 -
语音 SDK 版本 - v1.33.0 或更高版本。 必须在Windows上安装
Microsoft.CognitiveServices.Speech.Extension.MAS包。 - Raw audio - Microsoft Audio Stack 需要原始(未处理)音频作为输入,以便获得最佳结果。
- 环回或参考音频 - 执行声学回声消除需要一个表示设备正在播放音频的音频通道。
- Input 格式 - Microsoft Audio Stack 支持下采样,采样率是 16 kHz 的整数倍。 要求最低采样率为16 kHz。 支持的格式:32 位 IEEE 小端序浮点数、32 位小端序有符号整数、24 位小端序有符号整数、16 位小端序有符号整数和 8 位有符号整数。
何时使用基于模型的回显取消
请考虑在以下情况下使用基于 V2 模型的回显取消管道:
- 回声抑制至关重要 - 应用程序需要高质量的回声抑制,例如在无手语音交互方案中。
- 默认管道留下剩余回显 - 如果默认管道中基于 DSP 的回显取消无法充分抑制环境中的回显。
在以下情况下使用默认管道 (AUDIO_INPUT_PROCESSING_ENABLE_DEFAULT)
- 需要单独的增强控制 - 默认管道允许您禁用特定的增强功能,如去混响或噪声抑制。
- Cross-platform 支持是必需的 - 默认管道在 Windows 和 Linux 上都可用。
语言和平台支持
| 语言 | Platform | 参考文档 |
|---|---|---|
| C++ | Windows x64、Windows ARM64 | C++ 文档 |
| C# | Windows x64、Windows ARM64 | C# 文档 |