在“反馈中心”上链接到漏洞报告
音频端点设备,以下简称“端点”,是指物理或虚拟的音频输出或输入设备。
随着Windows 10 1803版本的更新,期待已久的“应用程序音量和设备首选项”被引入。这些设置允许更多地控制音频流管理,因为现在可以为不同的应用程序设置不同的端点,无论该特定应用程序是否带有端点选择。
然而,存在一个问题,即当一个端点为非默认值的程序被关闭并重新启动后,其音频通过默认端点进行流式传输(或根本不进行流式传输),尽管在设置中正确显示了端点。 据我所知,此问题可以在Windows 10计算机(版本1803或更高版本)上使用任何虚拟或物理终端和受影响的程序进行重现。 我在此示例中使用了“VLC Media Player”(忽略它带有终端选择的事实),因为它是众所周知且广泛可用的,这应该使重现问题更容易。
我正在寻找...
...一种以编程方式切换端点的解决方案,最好能够以脚本形式启动,以便在应用程序启动时设置正确的端点。
对于我的目的来说,只需手动调整设备实例路径即可,因为设备始终是相同的,但如果有一种从注册表中检索设备实例路径的解决方案,我也不会抱怨。
- 定义的端点和它们所使用的设备的设备实例路径可以从键
HKEY_USERS\# YOUR SID #\Software\Microsoft\Multimedia\Audio\DefaultEndpoint
的子键中检索。我不知道Windows如何生成子键的名称或者它们在哪里可以找到。如果我要猜测,我会说这些是应用程序ID(如果我错了,请随意纠正我)。 - 设备实例路径本身可以在设备管理器中找到(在“音频输入和输出”下双击所需设备,导航到“详细信息”选项卡,并从“属性”下拉菜单中选择“设备实例路径”)。
- 此外,Microsoft Docs 中关于 音频端点设备 和 流管理 的条目可能会有所帮助,但那已经超出了我的理解范围。
一个可能但不切实际的解决方法...
...是手动为应用程序设置另一个端点,并在每次启动该应用程序时切换回所需的端点(如上所示)。
但这至少需要每次启动10秒钟,而且您甚至可能会忘记这样做,因为音频可能会通过默认端点*¹
流式传输。
后者的替代方案是,根本不会流式传输任何音频*²
,或在某些情况下它确实有效*³
。
*¹
例如:VLC媒体播放器,汤姆·克兰西的彩虹六号围攻(尽管在闪屏画面期间音频将被正确地流式传输)
*²
例如:使命召唤4:现代战争,使命召唤:现代战争2,使命召唤:现代战争3
*³
例如:Window媒体播放器,Microsoft Edge,Firefox
观察结果
- VLC媒体播放器带有端点选择功能,但TeamSpeak 3也是如此,与VLC不同,它完全跳过了Windows设置。
- 使命召唤不播放任何音频很可能与引擎有关,因为我没有遇到其他应用程序做类似的事情。
- 截至目前,Windows媒体播放器,Microsoft Edge和Firefox是唯一可以正常工作的程序(我测试过)。它们没有端点选择(我知道的),并且在关闭并重新启动后将使用正确的端点。但是应该注意的是,当调整端点时,Firefox和Microsoft Edge将在“应用程序音量和设备首选项”中显示多个实例。
免责声明
我已经尝试了两个第三方软件:'Audio Router',它根本不起作用;'CheVolume'解决不了问题,而且在这样做时经常崩溃。
这个问题是基于我在Super User上提出的一个问题(这里),由于我对实际编程缺乏知识(我只对Batch和PowerShell有些了解),所以我没有得到能够解决问题的答案。我很清楚,Stack Overflow和Super User都不是脚本编写服务,但是问题在Windows 10 October Update 1809中没有得到解决,我认为这是一个问题,不仅影响我,也会对我之后的多个人有所帮助。如果您有不同的看法,请随意写下评论或提出修改意见。
我也不确定在这种情况下是否应该使用“音频流”和“端点”标签,请提出修改建议,如果它们不适用或者您有更好的想法。
编辑 - 05/11/18
通过使用第三方软件“EarTrumpet”,我成功解决了“使命召唤”游戏在重新启动后无任何音频的问题,然而,当我使用“EarTrumpet”分配非默认端点后,“VLC媒体播放器”无法重新启动,直到我再次关闭“EarTrumpet”,而“汤姆克兰西的彩虹六号围攻”仍然存在同样的问题。
编辑 - 18/01/19
添加了一个链接,这是我2个月前在“反馈中心”上创建的漏洞报告。
编辑 - 20/01/19
经过再次测试,应注意在后台运行“EarTrumpet”将使“VLC媒体播放器”在重新启动时保留非默认端点,但是,“VLC媒体播放器”仅在“应用程序音量和设备首选项”中设置了非默认端点时才会(可靠地)重新启动。