跳到主要内容

声学回声消除

流式音频波形 及其派生类型(例如 可捕获音频波形)支持声学回声消除(AEC)。AEC 可以消除由渲染信号(例如,通过扬声器播放的音频)引起的麦克风捕获音频中的回声。其结果是,在实时通信场景中获得更清晰的语音捕获。

该插件通过 WebRTC AEC3 实现提供 AEC,该实现作为一个轻量级扩展插件提供,仅包含相关的 AEC3 代码。WebRTC AEC3 是一种高质量的声学回声消除器,广泛应用于实时通信应用程序中。它对扬声器和麦克风之间的声学路径进行建模,以从捕获信号中减去回声。

安装

要使用声学回声消除功能,您需要安装 WebRTC AEC3 扩展插件:

  1. 确保 Runtime Audio Importer 插件已安装在您的项目中
  2. 此处 下载 WebRTC AEC3 扩展插件
  3. 将下载的压缩包中的文件夹解压到项目的 Plugins 文件夹中(如果该文件夹不存在,请创建它)
  4. 重新构建您的项目(此扩展需要 C++ 项目)
important
  • WebRTC AEC3 支持 Runtime Audio Importer 支持的所有引擎版本(UE 4.24, 4.25, 4.26, 4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6 和 5.7)
  • 此扩展以源代码形式提供,需要使用 C++ 项目
  • 有关如何手动构建插件的更多信息,请参阅 构建插件教程

基本用法

典型的 AEC 工作流程涉及三个步骤:

  1. 在您的流式/可捕获音频波形上启用 AEC
  2. 在渲染音频波形上配置渲染块大小,以实现 10 毫秒帧的交付
  3. 绑定渲染音频波形,其音频将用于消除捕获信号中的回声

启用 AEC

要在创建流式音频波形后启用 AEC,请使用 ToggleAEC 函数。您必须为 AEC 处理器指定采样率和通道数。如果传入的捕获或渲染音频与这些值不匹配,它将自动进行重采样,但是,配置的采样率仍然会影响质量(例如,48000 Hz 将比 16000 Hz 产生更好的回声消除效果)和性能,因此值得仔细选择这些值,而不是留给重采样处理。

Toggle AEC node

您可以检查 AEC 当前是否已启用:

Is AEC Enabled 节点

配置渲染块大小

WebRTC AEC3 要求音频以 10 毫秒的块 进行处理。为确保渲染音波以正确的帧大小提供音频数据,请在渲染 Imported Sound Wave(通过扬声器播放的音波)上使用 SetNumSamplesPerChunk 函数。

计算每个块正确样本数的公式为:

Samples per chunk=SampleRate100\text{Samples per chunk} = \frac{\text{SampleRate}}{100}

例如,对于 48000 Hz 音频:48000 / 100 = 480 个样本每块。

设置每块样本数节点

绑定渲染音波

启用AEC并配置块大小后,绑定其音频将用于识别和从捕获信号中移除回声的渲染音波。这通常是正在通过扬声器播放、可能被麦克风拾取的音波:

Bind AEC To Sound Wave Playback node

要解绑渲染音波:

Unbind AEC From Sound Wave Playback node

附加配置

流延迟

您可以设置渲染和捕获音频路径之间的估计流延迟(以毫秒为单位)。这可以解释硬件和系统延迟,尽管在许多情况下 WebRTC AEC3 可以自动估算此延迟:

设置 AEC 流延迟节点

重置 AEC

您可以随时重置内部 AEC 处理器状态,清除任何累积的回声模型:

Reset AEC node

提示

WebRTC AEC3 支持 8000、16000、32000 和 48000 Hz 的采样率。不匹配的音频会被自动重采样,但这会带来性能开销。为了获得最佳质量和性能,请使用 48000 Hz,并使捕获流和渲染流的实际音频配置保持一致。