音频处理对象体系结构

音频处理对象 (APO),为 Windows 音频流提供可自定义的基于软件的数字信号处理。

音频处理对象概述

Windows 允许 OEM 和第三方音频硬件制造商在其音频驱动程序增值功能中包含自定义数字信号处理效果。 这些效果打包为用户模式系统效果音频处理对象 (APO)。

音频处理对象 (APO),为 Windows 音频流提供基于软件的数字信号处理。 APO 是一个 COM 主机对象,其中包含写入以提供特定数字信号处理 (DSP) 效果的算法。 此功能被非正式地称为“音频效果”。APO 的示例包括图形均衡器、混响、震荡、回声消除 (AEC) 和自动增益控制 (AGC)。 APO 是基于 COM 的实时进程内对象。

请注意,本文档中的说明和术语主要指输出设备,例如扬声器。 不过,该技术是对称的,对输入设备的作用基本上是相反的。

软件 APO 与硬件 DSP

硬件数字信号处理器 (DSP) 是一种专用微控制器(或 SIP 块),其体系结构针对数字信号处理的操作需求进行优化。 与使用软件 APO 相比,在专用硬件中实现音频处理可能有显著优势。 一个优点是,硬件实现的 DSP 的 CPU 使用率和关联的功耗可能会更低。

在实现基于软件的 APO 之前,你还需要根据具体的项目目标和限制因素考虑其他优缺点。

在初始化流时,基于软件的效果会插入软件设备管道中。 这些解决方案在主 CPU 上执行所有影响处理,不依赖于外部硬件。 当驱动程序和硬件仅支持 RAW 处理时,此类解决方案最适合传统的 Windows 音频解决方案,例如 HDAudio、USB 和蓝牙设备。 有关 RAW 处理的详细信息,请参阅音频信号处理模式

硬件 DSP 的代理 APO

在硬件 DSP 中应用的任何效果都需要通过代理 APO 播发。 Microsoft 提供默认代理 APO (MsApoFxProxy.dll)。 若要使用 Microsoft 提供的 APO,必须支持此属性集和属性。

(可选)可以实现自己的代理 APO。

Windows 提供的(系统)APO

Windows 会安装一组默认的 ADO,这些 APO 提供许多不同的音频效果。 有关系统提供的 APO 效果的列表,请参阅音频信号处理模式

OEM 可以包含所有系统提供的 APO,或者将部分或全部 API 替换为自定义 APO。

自定义 APO

可以通过添加其他音频效果创建自定义 APO 来增强 Windows 音频体验。

OEM 可以在发布 Windows 时包含所提供 Windows APO 和自定义 APO 的任意组合。

OEM 或第三方可以安装自定义 APO,以在购买设备后增强音频体验。 当用户使用标准 INF 文件安装音频设备驱动程序时,他们会自动访问系统的 APO。 独立硬件供应商 (IHV) 和原始设备制造商 (OEM) 可以在仍使用 Microsoft 类驱动程序的同时提供额外的自定义系统效果。 为此,他们会将 DSP 算法打包为 APO 并修改标准 INF 文件,以将其 APO 插入音频引擎的信号处理图中。

有关创建自定义 APO 的详细信息,请参阅实现音频处理对象

自定义 APO 支持应用

若要允许用户配置与自定义 APO 关联的设置,建议的方法是创建硬件支持应用。 有关详细信息,请参阅硬件支持应用 (HSA):驱动程序开发人员的步骤

自定义 APO 测试和要求

Microsoft HLK 提供可与 APO 一起使用的测试。 有关音频测试的详细信息,请参阅 Device.Audio 测试Device.Audio 测试

这两个测试在处理 ADO 时特别有用。

验证音频 EffectsDiscovery(手动)- 认证

SysFX 测试

有关支持 APO 的音频要求的信息,请参阅 Device.Audio 要求

自定义 APO 工具和实用工具

可以使用“音频效果发现示例”浏览可用的音频效果。 此示例演示如何查询对呈现和捕获音频设备上的音频效果,以及如何使用音频效果监视更改。 它作为 SDK 示例的一部分包含在内,可以使用以下链接下载:

音频效果发现示例

应用程序音频效果感知

应用程序能够调用 API 来确定系统上当前处于活动状态的音频效果。 有关音频效果感知 API 的详细信息,请参阅 AudioRenderEffectsManager 类

音频处理对象体系结构

音频效果的位置

音频效果有三个不同的位置作为 APO 实现。 它们位于流效果 (SFX)、模式效果 (MFX) 和终结点效果 (EFX) 中。

流效果 (SFX)

流效果 APO 具有每个流的效果实例。 给定模式的流效果位于 mix(呈现)之前或 tee(捕获)之后,可用于在混音器之前更改声道计数。 流效果不用于原始流。

某些版本的 Windows 作为优化,不会在 RAW 模式下加载 SFX 或 MFX APO。

  • Windows 8.1 不会加载 RAW SFX 或 RAW MFX
  • Windows 10 加载 RAW MFX,但不加载 RAW SFX

模式效果 (MFX)

模式效果 (MFX) 应用于映射到同一模式的所有流。 给定模式的模式效果在 mix(呈现)之后或 tee(捕获)之前应用,但所有模式的模式效果在 mix(呈现)之前或 tee(捕获)之后应用。 任何不需要流效果细节的方案特定效果都应放在此处。 使用模式效果更节能,因为具有相同特征(如周期性和格式)的多个流有一个实例。

终结点效果 (EFX)

终结点效果 (EFX) 应用于使用同一终结点的所有流。 系统会始终应用终结点效果,甚至将其应用于原始流。 也就是说,所有模式的终结点效果都在 mix(呈现)之后或 tee(捕获)之前。 终结点效果应谨慎使用,以及在怀疑效果应放置在模式区域中时使用。 应放置在终结点区域中的一些效果是扬声器保护和扬声器补偿。

此图显示了 Windows 10 的流 (SFX)、模式 (MFX) 和终结点 (EFX) 效果的可能位置。

Diagram illustrating the placement of stream, mode, and endpoint effects in Windows 10.

多个自定义 APO 效果

可以配置多个基于 APO 的效果来处理不同的应用程序。

此图演示了多个应用程序如何访问流、模式和终结点 APO 效果的多个组合。 所有 APO 都是基于 COM 的,在用户模式下运行。 在此方案中,任何效果都不会在硬件或内核模式下运行。

Diagram showing how multiple applications can access various combinations of stream, mode, and endpoint APO effects.

请注意,可以使用此页面最底部的滚动条来查看此关系图的所有内容。

用于呈现和捕获的软件模式效果和硬件终结点效果

此图演示了用于呈现和捕获的软件模式效果和硬件终结点效果。

Diagram displaying software mode effects and hardware endpoint effects for render and capture processes.

具有硬件效果的配备 DSP 的系统

此图演示了在硬件中实现效果的配备 DSP 的系统。 在此方案中,应创建代理 APO,以通知应用在硬件中实现的效果。

Diagram depicting a DSP-equipped system implementing effects in hardware.

Windows 音频处理对象

硬件卸载音频驱动程序实现