Visual C++中如何捕获未被Equalizer APO等音频增强修改的WASAPI回环音频
解决WASAPI Loopback捕获绕过Equalizer APO的问题
要捕获未经过APO和音频增强处理的原始播放音频,你可以通过以下几种方式实现:
1. 使用独占模式打开音频设备
系统音频增强和APO通常仅在共享模式下生效,切换到独占模式可以绕过这些处理逻辑。独占模式会直接访问硬件设备,捕获原始音频数据,但需注意:独占模式会占用设备,其他应用将无法同时使用该播放设备。
修改你的初始化代码:
- 将共享模式从
AUDCLNT_SHAREMODE_SHARED改为AUDCLNT_SHAREMODE_EXCLUSIVE - 移除触发格式转换的标志(如
AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM),改用设备原生格式
修改后的初始化核心代码:
// 获取设备原生格式,避免强制格式转换 WAVEFORMATEX* pMixFormat = NULL; res = pAudioClient->GetMixFormat(&pMixFormat); if (FAILED(res)) { cerr << "GetMixFormat " << res; return 1; } // 初始化音频客户端,使用独占模式 res = pAudioClient->Initialize( AUDCLNT_SHAREMODE_EXCLUSIVE, AUDCLNT_STREAMFLAGS_LOOPBACK | AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 0, 0, pMixFormat, NULL ); if (FAILED(res)) { cerr << "Initialize " << res; CoTaskMemFree(pMixFormat); // 释放格式内存 return 1; } CoTaskMemFree(pMixFormat); // 初始化完成后释放内存
2. 让Equalizer APO跳过你的捕获进程
如果你不想切换到独占模式,可以修改Equalizer APO的配置,让它不对你的捕获程序生效:
- 找到Equalizer APO安装目录,打开
config\config.txt - 添加以下规则,替换
YourApp.exe为你的程序文件名:
配置生效后,Equalizer APO会跳过对该程序的音频处理,捕获的就是原始数据。IfProcessIs "YourApp.exe" Disable EndIf
3. 禁用系统全局音频增强
在Windows音频设置中,直接禁用目标设备的所有音频增强:
- 右键任务栏音量图标 → 打开声音设置
- 找到默认通信播放设备,点击「设备属性」
- 切换到「增强」选项卡,勾选「禁用所有声音效果」
- 保存设置后重启捕获程序
注意事项
- 独占模式下必须使用设备原生格式,否则初始化会失败,因此必须调用
GetMixFormat获取格式 - 如果设备不支持独占模式,优先尝试修改Equalizer APO的排除规则,这是更轻量的解决方案
内容的提问来源于stack exchange,提问作者Tiger Yang
相关产品推荐
相关产品推荐

