如何让C++桌面应用启用Windows自动音频闪避且不闪避自身音频
问题:Windows默认自动音频闪避导致自身应用音频被闪避
我在C++桌面应用中尝试启用Windows默认自动音频闪避:通过打开mmsys.cpl进入「通信」选项卡配置,期望仅让Spotify、浏览器(如YouTube)等第三方应用的音频被闪避,自身应用的重要音频不受影响,避免被背景音覆盖。
但目前的问题是:不仅第三方应用的音频会被闪避,我自己的应用音频也会被闪避。最直观的测试方法是,将Windows声音设置中的音频闪避选项改为「静音其他所有声音」,此时自身应用音频也会被静音。
我是从微软的音频闪避示例中提取的功能,该示例模拟了WASAPI聊天这类通信会话/活动。我推测问题根源在于:虽然是我的应用开启了通信流,但示例中的通信活动优先级可能覆盖了自身应用的音频会话,导致自身音频也触发了闪避逻辑。我认为需要修改示例代码中的WasapiChat.Cpp部分来解决这个问题。
我明确要求使用Windows原生集成的「自动」音频闪避功能(即系统设置里的预设功能),而非通过自定义逻辑手动调低其他应用音量。目前找到两个直接相关的API:
IAudioSessionControl2::SetDuckingPreference:仅能在自动闪避行为和自定义行为之间切换(本质是关闭自动闪避),无法满足需求。IAudioClientDuckingControl::SetDuckingOptionsForCurrentStream:我正在测试这个API,但它存在最低Windows版本要求的限制。
欢迎提供修改、调整或新增代码的具体建议,核心目标是让自身应用音频不被Windows的自动闪避机制影响。
内容的提问来源于stack exchange,提问作者Ivan Rovelov
相关产品推荐
相关产品推荐

