设置音频端点设备特定于应用程序(以编程方式)

时间:2018-10-24 16:04:02

标签: c++ audio windows-10 audio-streaming endpoint

链接到“反馈中心”上的bug report


音频端点设备(在这里称为“端点”)是物理或虚拟音频输出或输入设备。


在Windows 10 April Update 1803中,已引入了过期已久的“应用程序数量和设备首选项”。这些设置允许对音频流管理进行更多控制,因为现在可以为不同的应用程序设置不同的端点,而不管该特定应用程序是否带有端点选择。

但是,存在一个问题,尽管端点显示正确,但端点是非默认的程序的音频在关闭并再次启动后仍通过默认端点(或根本没有)流过在设置中:

Issue Recreation

据我所知,可以在具有任何虚拟或物理终结点以及受影响的程序的Windows 10计算机(版本1803或更高版本)上重新创建该问题。在本示例中,我使用了“ VLC Media Player”(忽略了端点选择附带的事实),因为它众所周知且可广泛访问,这将使重新创建问题更加容易。


我要搜索的内容...

...是一种在端点之间切换的编程解决方案,理想情况下,可以以脚本形式启动该脚本,以通过应用程序启动来设置正确的端点。

出于我的目的,只需手动调整设备实例路径就足够了,因为设备总是一样的,但是我不会抱怨从注册表中检索设备实例路径的解决方案,

  • 可以从键HKEY_USERS\# YOUR SID #\Software\Microsoft\Multimedia\Audio\DefaultEndpoint的子键中检索定义的端点及其使用的设备的设备实例路径。我不知道Windows如何生成子项的名称或在哪里可以找到它们。如果我不得不大胆猜测,我会说这些是应用程序ID(如果我输入错了,请随时纠正我)。
  • 设备实例路径本身可以在设备管理器中找到(在“音频输入和输出”下,双击所需的设备,导航至“详细信息”标签,然后从“属性”下拉菜单中选择“设备实例路径”,下菜单)。
  • 此外,Microsoft文档中有关Audio Endpoint DevicesStream Management的条目可能会有所帮助,但这超出了我的理解。

一种可能但不切实际的解决方法...

...将是手动为该应用程序设置另一个端点,并在每次启动该应用程序时切换回所需的端点(如上所示)。

但不仅仅是每次启动至少花费10秒钟的时间,您甚至可能会忘记这样做,因为音频可能只是通过默认端点进行流传输。

后者的替代方法是,完全不流音频,或者在某些情况下实际上不流。

,例如:VLC媒体播放器,汤姆·克兰西的《彩虹六号:围攻行动》(尽管在启动屏幕期间可以正确流式传输音频)

,例如:《使命召唤4:现代战争》,《使命召唤:现代战争2》,《使命召唤:现代战争3》

,例如:Window Media Player,Microsoft Edge,Firefox

观察

  • VLC Media Player带有一个端点选择,但是TeamSpeak 3也带有端点选择,并且与VLC不同,它会完全跳过Windows设置。
  • 《使命召唤》不流任何音频,这很可能是连接到引擎的,因为我没有遇到其他做类似事情的应用程序。
  • 只有Windows Media Player,Microsoft Edge和Firefox可以正常运行(到目前为止,我已经测试过)。他们没有端点选择(我知道),并且在关闭并再次启动它之后将使用正确的端点。但是应注意,调整端点时,Firefox和Microsoft Edge将在“应用程序卷和设备首选项”中显示多个实例。

免责声明

我已经尝试了两种第三方软件:“音频路由器”和“ CheVolume”,它们根本无法工作,而“ CheVolume”不能解决问题,并且在运行时经常崩溃。

这个问题是基于我在超级用户(here)上问的一个问题,由于我对实际编程缺乏了解,我没有得到可以使用的答案(仅对Batch和PowerShell有所了解)。我很清楚,堆栈溢出和超级用户都不是脚本编写服务,但是,Windows 10 October Update 1809并没有解决此问题,我认为这是一个问题,不仅影响我自己,而且将影响到我。对我之后的多个人有帮助。如果您有不同的看法,请随时发表评论或提出修改。

我也不确定在这种情况下是否应使用标签“音频流”和“端点”,如果不合适,请提出修改建议,否则您会想到更好的方法。



编辑-18/05/11

使用第三方软件“ EarTrumpet”,我可以克服“使命召唤”游戏的问题(重新启动后完全没有音频),但是,当我分配了“非使命召唤”游戏后,“ VLC Media Player”将无法重新启动默认端点为“ EarTrumpet”,直到我再次关闭“ EarTrumpet”,并且“汤姆·克兰西的彩虹六号围攻”问题仍然相同。


编辑-19/01/19

添加了指向我两个月前在“反馈中心”上创建的bug report的链接。


编辑-19/01/20

再次进行一些测试后,应注意,在后台运行“ EarTrumpet”将在重新启动后保留“ VLC Media Player”的非默认端点,但是,“ VLC Media Player”仅(可靠地)重新启动在“应用音量和设备偏好设置”中设置了非默认终结点时。