音频处理对象APO
+ -

Window音频处理对象APO(SFX,GFX,EFX,MFX,SFX)

2022-09-15 1785 7

APO代表“音频处理对象”。它是一个API和框架,由Microsoft设计,用于构建可插拔的音频过滤器(DSP)。原则上它与VST非常相似。

Window音频处理对象APO用于实现对系统的声卡的数据处理,通过处理,可以实现用户自定义的均衡器、混响、颤音、回声消除 (AEC) 和自动增益控制 (AGC)等功能。

从技术上讲,APO采用实现APO接口的COM类的形式。生成的类通常作为DLL的一部分提供,然后在系统范围的COM注册表中注册(例如,使用regsvr32)。

然后可以实例化该类,每个实例可以处理连续的音频流,对音频数据进行任意更改。

APO是工作在应用层的驱动程序。当然Windows系统也提供了一些自己的APO对象,可以供用户使用。

用户自行开发的APO对象叫自定义APO。其实体包括INF文件和DLL文件。他们通过将其音频算法打包为 APO 并修改标准 INF 文件以将其 APO 插入音频引擎的信号处理图中来实现这一点。

音频处理对象APO架构

通过实现IAudioSystemEffects接口,可以将APO安装为系统效果APO或sAPO。sAPO是可选的APO,可以插入Windows音频引擎管道内的各个点。

sAPO可以用于任意过滤系统范围内运行的所有Windows应用程序的音频;而且,由于它们直接在Windows音频引擎中运行,因此可以以非常干净和高效的方式运行,无需额外的转换和零附加延迟。

音频处理按位置可分为三种:

  • 流式音效Stream effects (SFX)
  • 模式音效Mode effects (MFX)
  • 端点音效 Endpoint effects (EFX)

在Windows8.1之前,APO被分为LFX和GFX.

Type Property ID Property name
SFX {d04e05a6-594b-4fb6-a80d-01af5eed7d1d},5 PKEY_FX_StreamEffectClsid
MFX {d04e05a6-594b-4fb6-a80d-01af5eed7d1d},6 PKEY_FX_ModeEffectClsid
EFX {d04e05a6-594b-4fb6-a80d-01af5eed7d1d},7 PKEY_FX_EndpointEffectClsid
LFX {d04e05a6-594b-4fb6-a80d-01af5eed7d1d},1 PKEY_FX_PreMixEffectClsid
GFX {d04e05a6-594b-4fb6-a80d-01af5eed7d1d},2 PKEY_FX_PostMixEffectClsid
{d04e05a6-594b-4fb6-a80d-01af5eed7d1d},12 PKEY_FX_Offload_ModeEffectClsid
{d04e05a6-594b-4fb6-a80d-01af5eed7d1d},11 PKEY_FX_Offload_StreamEffectClsid
{D3993A3F-99C2-4402-B5EC-A92A0367664B},11 PKEY_SFX_Offload_ProcessingModes_Supported_For_Streaming
{D3993A3F-99C2-4402-B5EC-A92A0367664B},12 PKEY_MFX_Offload_ProcessingModes_For_Streaming
{D3993A3F-99C2-4402-B5EC-A92A0367664B},7 PKEY_EFX_ProcessingModes_Supported_For_Streaming
{D3993A3F-99C2-4402-B5EC-A92A0367664B},6 PKEY_MFX_ProcessingModes_For_Streaming
{D3993A3F-99C2-4402-B5EC-A92A0367664B},5 PKEY_SFX_ProcessingModes_For_Streaming

Audio INF File Settings:https://learn.microsoft.com/en-us/windows-hardware/drivers/audio/media-class-inf-extensions

音频处理对象APO架构

流式音效Stream effects (SFX)

对于流式音效SFX,每个音频流都有一个APO实例。流式音效在在音频信号进出单个应用程序时对其进行处理。故流式音频对于Render设备而言,位于混音之前;对于Capture设备而言,位于拾音之后。所以流式音频可以在混音之前,更改音频通道数量。

模式音效Mode effects (MFX)

模式音效MFX,用于对具人相同模式的音频流处理。
模式音效用于给定模式的混音之后。模式音频更省电,因为多个流有一个实例,它们共享相同的特征,如周期性和格式
模式音频在中间阶段运行,对共享一个共同模式的所有流的混合音频。

端点音效 (EFX)

端点效果 (EFX) 对进出音频设备的音频信号进行操作,应用于使用相同端点的所有流。

LFX,GFX

  • Local Effect (LFX) APOs 也称为pre-mix APOs(预混音APO),与SFX APO具有相同的用途。
  • Global Effect (GFX) APOs,混合后APO,与EFX APO具有相同的用途。

LFX和GFX APO仍然可以在现代版本的Windows中使用,但它们不再出现在文档中;它们应该被视为已弃用。如果同时配置了现代(SFX/MFX/EFX)和传统(LFX/GFX)sAPO,则Windows将使用现代sAPO

所有APO的禁用与启用

一个值得注意的属性是PKEY_AudioEndpoint_Disable_SysFx({1da5d803-d492-4edd-8c23-e0c0ffee7f0e},5,DWORD),如果设置为1,则禁用所有sAPO。它映射到Windows音频设备设置中的“启用音频增强”复选框。

static const wchar_t* disableEnhancementsValueName = L"{1da5d803-d492-4edd-8c23-e0c0ffee7f0e},5";

所以如果要使用当前设备的APO,如果有些项,需要删除注册表.

#define commonKeyPath L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\MMDevices\\Audio"
#define renderKeyPath commonKeyPath L"\\Render"
#define captureKeyPath commonKeyPath L"\\Capture"

wstring keyPath = captureKeyPath L"\\" + deviceGuidStrings[i];

// force-enable enhancements
if (RegistryHelper::valueExists(keyPath + L"\\FxProperties", disableEnhancementsValueName))
    RegistryHelper::deleteValue(keyPath + L"\\FxProperties", disableEnhancementsValueName);

参考文档:https://github.com/dechamps/APO

0 篇笔记 写笔记

Window音频处理对象APO(SFX,GFX,EFX,MFX,SFX)
APO代表“音频处理对象”。它是一个API和框架,由Microsoft设计,用于构建可插拔的音频过滤器(DSP)。原则上它与VST非常相似。Window音频处理对象APO用于实现对系统的声卡的数据处理,通过处理,可以实现用户自定义的均衡器、混响、颤音、回声消除 (AEC) 和自动增益控制 (AGC......
APO音频处理象开发概述及对接口关系
自定义音频处理对象APO的步骤:创建自定义 APO com 对象以提供所需的音频处理对象。创建用户界面以使用配置自定义 APO(可选)。创建 INF 文件以安装和注册 APO 和自定义用户界面。APO 必须有一个输入和一个输出连接。这些连接是音频缓冲区,可以有多个通道。APO 只能修改通过其I......
SwapAPO工程概述
SwapAPO是微软自带的一个APO工程,其功能实现的是左右声道的数据交换。具有很强的参考意义。工程源代码地址位于:https://github.com/Microsoft/Windows-driver-samples/tree/main/audio/sysvadSwapAPO工程配置工程目录如下......
SwapAPO COM接口关系图
总目录为SwapAPODlllib,其UUIP定义为:// SwapAPODlllib//[ uuid(7092F0B2-D28D-4095-95A7-6C37A97432A2), version(1.0)]其包含2个COM类,分别为SFXMFXlibrary Swap......
SWAP APO inf文件信息
SWAP APO编译后的主体为swapapo.dll这里参考ComponentizedApoSample.inf文件的部分节选说明。inf文件的方体结构和普通的驱动INF文件一致,其结构如下:这里关于APO的注册关键是注册表Apo_AddReg相关的。这里先将各个UUID之间的关系说明一下:[A......
清除音频设备的音效处理模块APO(FxProperties注册表项)
Windows 音效处理大致分为SFX,MFX,EFX, 按照顺序,依次处理。下面是如何移除这些模块的方法:打开设备管理器-音频输入输出设备,找到要修改的设备,右键属性-详情,在属性列表框里选择 设备实例路径,有如下值,记录红色部分SWDMMDEVAPI{0.0.0.00000000}.{0......
让系统加载未签名的APO
打开注册表:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionAudio创建注册表项:DisableProtectedAudioDG = 1 (DWORD)......
Equalizer APO简介
Equalizer APO是一款图形参数化的Windows音频均衡器,它的实现技术实现是基于Vista系统的 Audio Processing Object(APO)。Equalizer APO特征过滤器的数量实际上是无限的适用于任何数量的频道非常低的延迟,这使得它适合于交互式应用程序CPU使用......
Windows音频音擎audiodg与APO关系
APO与其他音频过滤框架(如VST)的区别在于,APO是Windows音频引擎使用的过滤框架。VST:Virtual Studio TechnologyWindows音频引擎是Windows音频堆栈的核心组件。它的作用是在单个应用程序音频流和硬件音频设备之间架起桥梁。因此,它可以处理各种任务......
APO动态库DLL文件的路径问题
APO DLL注册路径APO的DLL文件是通过regsvr32注册表的。比如:regsvr32.exe xxAPO.dll这样在注册表HKEY_LOCAL_MACHINESOFTWAREClassesCLSID就会记录该文件的GUID的路径。该GUIDPKEY_FX_*EffectCls......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!