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

Posted

技术标签:

【中文标题】设置音频端点设备应用程序特定(以编程方式)【英文标题】:Set audio endpoint devices application specific (programmatically) 【发布时间】:2019-03-29 03:11:14 【问题描述】:

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


音频端点设备,下文称为“端点”,是物理或虚拟音频输出或输入设备。


随着 Windows 4 月 10 日更新 1803,引入了早该出现的“应用程序数量和设备首选项”。这些设置允许对音频流管理进行更多控制,因为现在可以为不同的应用程序设置不同的端点,无论该特定应用程序是否带有端点选择。

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

据我所知,可以在具有任何虚拟或物理端点和受影响程序的 Windows 10 机器(版本 1803 或更高版本)上重新创建该问题。我在此示例中使用了“VLC 媒体播放器”(忽略它附带端点选择的事实),因为它众所周知且可广泛访问,这应该可以更轻松地重新创建问题。


我在寻找什么...

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

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

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

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

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

但不仅每次启动至少需要 10 秒,您甚至可能忘记这样做,因为音频可能只是通过默认端点 进行流式传输。

后者的替代方案是,根本不会流式传输音频,或者在某些情况下它实际上可以工作

例如:VLC 媒体播放器、汤姆克兰西的彩虹六号围攻(虽然音频将在启动画面中正确播放)

例如:使命召唤 4:现代战争、使命召唤:现代战争 2、使命召唤:现代战争 3

例如:Window Media Player、Microsoft Edge、Firefox

观察

VLC 媒体播放器带有端点选择,但 TeamSpeak 3 也有,而且与 VLC 不同,它完全跳过了 Windows 设置。 使命召唤没有流式传输任何音频很可能与引擎有关,因为我没有遇到任何其他应用程序执行类似操作。 Windows Media Player、Microsoft Edge 和 Firefox 是唯一可以正常工作的程序(我测试过)。他们没有端点选择(我知道),并且在关闭并再次启动后将使用正确的端点。但需要注意的是,Firefox 和 Microsoft Edge 在调整端点时会在“应用音量和设备首选项”中显示多个实例。

免责声明

我已经尝试了两个 3rd 方软件:“Audio Router”,它根本不起作用,“CheVolume”,它不能解决问题并且在这样做时经常崩溃。

这个问题是基于我在超级用户 (here) 上问的一个问题,由于我对实际编程缺乏了解(我只是有点熟悉 Batch 和 PowerShell)。我很清楚 Stack Overflow 和 Super User 都不是脚本编写服务,但是,Windows 10 月 10 日更新 1809 并没有解决这个问题,我认为这是一个不仅影响我的问题,而且会是对我之后的多人有帮助。如果您对此有不同看法,请随时发表评论或提出修改建议。

我也不确定在这种情况下是否应该使用标签“audio-streaming”和“endpoint”,如果不应该使用,请提出修改意见,或者您可以想出更好的方法。



编辑 - 2018 年 5 月 11 日

使用 3rd 方软件“EarTrumpet”我能够克服“使命召唤”游戏的问题(重新启动后根本没有音频),但是,“VLC 媒体播放器”在我分配非- 使用“EarTrumpet”的默认端点,直到我再次关闭“EarTrumpet”并且“汤姆克兰西的彩虹六号围攻”的问题仍然存在。


编辑 - 2019 年 1 月 18 日

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


编辑 - 20/01/19

再次进行一些测试后,应注意在后台运行“EarTrumpet”将在重新启动时为“VLC 媒体播放器”保留一个非默认端点,但是,“VLC 媒体播放器”只会(可靠地)重新启动在“应用音量和设备首选项”中设置了非默认端点时。

【问题讨论】:

对于它的价值,VLC 为我保存了它的输出设备,当在 VLC 本身中设置时。 VLC 3.0.3. @Brad 感谢您的评论,但我很清楚这一点(如观察中所述)。我选择 VLC 作为一个例子,因为它是一个广为人知且可以被很多人广泛访问的程序,因此问题的重现是最小的努力。我将添加一个额外的注释以防止混淆。 :) 【参考方案1】:

对于处理此类事件的编程语言,我没有任何解决方案。

但我可以推荐 EarTrumpet 应用程序以更快地处理此更改https://www.theverge.com/2018/6/13/17457778/eartrumpet-windows-10-audio-app

(Windows 商店:https://www.microsoft.com/en-us/p/eartrumpet/9nblggh516xp?ranMID=24542&ranEAID=nOD%2FrLJHOac&ranSiteID=nOD_rLJHOac-hUn6PgKuMKwQLdrzRqnPTA&epi=nOD_rLJHOac-hUn6PgKuMKwQLdrzRqnPTA&irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=%28ir__qwqlg6jd0jba3y9hpnbvikaite2xk6kuyv9udtr100%29%287593%29%281243925%29%28nOD_rLJHOac-hUn6PgKuMKwQLdrzRqnPTA%29%28%29&irclickid=_qwqlg6jd0jba3y9hpnbvikaite2xk6kuyv9udtr100&activetab=pivot:overviewtab)

如果我找到一种简单的方法来编写/编程每个应用程序的输出更改,我会更新答案。

【讨论】:

虽然这不是我要明确搜索的内容,但我会先试一试并报告,谢谢! 检查问题末尾的“编辑 - 2018 年 5 月 11 日”。 ^^ 只需安装耳小号就足以让该设置最终坚持用于盗贼之海。如果它在重新启动后幸存下来会很有趣。

以上是关于设置音频端点设备应用程序特定(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式设置特定序列的音频文件?

如何以编程方式更改电子内部 Angular 中的音频输出设备?

如何以编程方式设置 Windows 音频平衡级别?

Windows 10 音频输入设备设置存储在哪里?

如何以编程方式关闭棉花糖设备中特定应用程序的打盹模式

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?