音频处理对象(APO),为 Windows 音频流提供基于自定义的软件的数字信号处理。
音频处理对象概述
Windows 允许 OEM 和第三方音频硬件制造商在其音频驱动程序增值功能中包含自定义数字信号处理效果。 这些效果打包为用户模式系统效果音频处理对象(APO)。
音频处理对象(APO),为 Windows 音频流提供基于软件的数字信号处理。 APO 是一个 COM 主机对象,其中包含写入以提供特定数字信号处理(DSP)效果的算法。 此功能被非正式地称为“音频效果”。API 的示例包括图形均衡器、混响、震荡、声学回声取消(AEC)和自动增益控制(AGC)。 APOS 是基于 COM 的实时进程内对象。
注意 本文档中的说明和术语主要指输出设备,如扬声器。 但是,该技术是对称的,并且基本上反向适用于输入设备。
软件 API 与硬件 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 提供的(系统)APOS
Windows 会安装一组默认的 APO,这些 APO 可以提供多种不同的音效。 有关系统提供的 APO 效果的列表,请参阅 音频信号处理模式。
OEM 可以包括所有系统提供的 APO,或者将部分或全部 APO 替换为自定义 APO。
自定义 APOS
可以通过添加其他音频效果创建自定义 API 来增强 Windows 音频体验。
OEM 可以在发行 Windows 时包含提供的 Windows APO 和自定义 APO 的任意组合。
OEM 或第三方可以安装自定义 APO,以在设备购买后增强音频体验。 当用户使用标准 INF 文件安装音频设备驱动程序时,他们会自动访问系统的 ADO。 独立硬件供应商(IHV)和原始设备制造商(OEM)可以提供额外的自定义系统效果,同时仍然使用Microsoft类驱动程序。 它们通过将 DSP 算法打包为 APO,并修改标准 INF 文件,将这些 APO 插入音频引擎的信号处理图中来实现。
有关创建自定义 API 的详细信息,请参阅 实现音频处理对象。
自定义 APO 支持应用
若要允许用户配置与自定义 APO 关联的设置,建议的方法是创建硬件支持应用。 有关详细信息,请参阅硬件支持应用 (HSA):驱动程序开发人员的步骤。
自定义 APO 测试和要求
Microsoft HLK 提供可与 APO 一起使用的测试。 有关音频测试的详细信息,请参阅 Device.Audio Testing 和 Device.Audio Tests。
这两个测试在处理 APO 时特别有用。
有关支持 APOS 的音频要求的信息,请参阅 Device.Audio 要求。
自定义 APO 工具和实用工具
可以使用“音频效果发现示例”浏览可用的音频效果。 此示例演示如何查询对呈现和捕获音频设备的音频效果,以及如何使用音频效果监视更改。 它作为 SDK 示例的一部分包含在内,可以使用以下链接下载:
应用程序音频效果感知
应用程序能够调用 API 来确定系统上当前处于活动状态的音频效果。 有关音频效果感知 API 的详细信息,请参阅 AudioRenderEffectsManager 类。
音频处理对象体系结构
音频效果的位置
音频效果有三个不同的位置作为 APO 实现。 它们位于流效果(SFX)、模式效果(MFX)和终结点效果(EFX) 中。
流效果 (SFX)
每个流的流效果 APO 都有一个效果实例。 流效果处理是在给定模式下,位于混合(渲染)之前或分接(捕获)之后,可以用于在混音器之前更改通道数。 流效果不用于原始流。
某些版本的 Windows 作为优化,不会在 RAW 模式下加载 SFX 或 MFX API。
- Windows 8.1 不会加载 RAW SFX 或 RAW MFX
- Windows 10 加载 RAW MFX,但不加载 RAW SFX
模式效果 (MFX)
模式效果(MFX)应用于映射到同一模式的所有流。 模式效果在混合(渲染)或 Tee(捕获)之前应用于给定模式,但在所有模式的混合(渲染)或 Tee(捕获)之后应用。 任何场景特定效果或不需要流效果细节的效果都应放在此处。 使用模式效果更有效率,因为多个流有一个实例共享相同的特征,如周期性和格式。
终结点效果 (EFX)
终结点效果(EFX)应用于使用同一终结点的所有流。 终结点效果始终应用于原始流。 也就是说,它是在所有模式的混音(渲染)之后或分流(捕获)之前。 终结点效果应谨慎使用,在不确定时,效果应放置在模式区域中。 应放置在终结点区域中的一些效果是扬声器保护和扬声器补偿。
此图显示了 Windows 10 的流(SFX)、模式(MFX)和终结点(EFX)效果的可能位置。
              
               
              
              
            
多个自定义 APO 效果
可以配置多个基于 APO 的效果来处理不同的应用程序。
此图演示了多个应用程序如何访问流、模式和终结点 APO 效果的多个组合。 所有 APO 都是基于 COM 的,在用户模式下运行。 在此情景中,任何效果都不会在硬件模式或内核模式下运行。
              
               
              
              
            
注意 可以使用此页面底部的滚动条查看所有关系图。
用于呈现和捕获的软件模式效果和硬件终结点效果
此图演示了用于呈现和捕获的软件模式效果和硬件终结点效果。
              
               
              
              
            
配备 DSP 的硬件效果系统
此图演示了在硬件中实现效果的 DSP 装备的系统。 在这种情况下,应创建代理 APO,以通知应用硬件中实现的效果。
              
              