You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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为你的程序文件名:
    IfProcessIs "YourApp.exe"
      Disable
    EndIf
    
    配置生效后,Equalizer APO会跳过对该程序的音频处理,捕获的就是原始数据。

3. 禁用系统全局音频增强

在Windows音频设置中,直接禁用目标设备的所有音频增强:

  1. 右键任务栏音量图标 → 打开声音设置
  2. 找到默认通信播放设备,点击「设备属性」
  3. 切换到「增强」选项卡,勾选「禁用所有声音效果」
  4. 保存设置后重启捕获程序

注意事项

  • 独占模式下必须使用设备原生格式,否则初始化会失败,因此必须调用GetMixFormat获取格式
  • 如果设备不支持独占模式,优先尝试修改Equalizer APO的排除规则,这是更轻量的解决方案

内容的提问来源于stack exchange,提问作者Tiger Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:32:10