链接到"反馈中心" 的错误报告
音频端点设备(此处称为"端点")是物理或虚拟音频输出或输入设备.
在Windows 10 April Update 1803中,引入了早该应用的"应用程序卷和设备首选项".这些设置允许更多地控制音频流管理,因为现在可以为不同的应用程序设置不同的端点,无论该特定应用程序是否带有端点选择.
但是,有一个问题是程序的音频(其端点是非默认的)在关闭并再次启动后通过默认端点(或根本不是)流式传输,尽管端点在设置中正确显示:
据我所知,可以在具有任何虚拟或物理端点和受影响程序的Windows 10计算机(版本1803或更高版本)上重新创建该问题.我在这个例子中使用了"VLC媒体播放器"(忽略了它带有端点选择的事实),因为它是众所周知的并且可以广泛访问,这样可以更容易地重新创建问题.
我在寻找什么......
...是一种在端点之间切换的编程解决方案,理想情况下可以以脚本的形式启动,以通过应用程序启动设置正确的端点.
为了我的目的,只需手动调整设备实例路径就足够了,因为设备总是一样的,但我也不会抱怨从注册表中检索设备实例路径的解决方案.
HKEY_USERS\# YOUR SID #\Software\Microsoft\Multimedia\Audio\DefaultEndpoint.我不知道windows如何生成子项的名称或它们可以在哪里找到.如果我不得不疯狂猜测,我会说这些是应用程序ID(如果我错了,请随时纠正我).一个可能但不切实际的解决方法......
...将为应用程序手动设置另一个端点,并在每次启动所述应用程序时切换回所需的端点(如上所示).
但是,不是每次启动都至少需要10秒,你甚至可能忘记这样做,因为音频可能只是通过默认端点流式传输*¹.
后者的替代方案是,根本不会传输音频,*²或者在某些情况下它实际上是有效的*³.
*¹ 例如:VLC媒体播放器,Tom Clancy的Rainbow Six Siege(虽然在启动画面期间音频将正确流式传输)
*² 例如:使命召唤4:现代战争,使命召唤:现代战争2,使命召唤:现代战争3
*³ 例如:Window Media Player,Microsoft Edge,Firefox
意见
放弃
我已经尝试了两个第三方软件:"音频路由器",它根本不起作用和"CheVolume",它不能解决问题并且在这样做时不断崩溃.
这个问题基于我在超级用户(这里)询问过的问题,由于我对实际编程缺乏了解,我无法得到答案(我对Batch和PowerShell只有一点熟悉) ).我很清楚,Stack Overflow和Super User都不是脚本编写服务,但是,这个问题没有得到Windows 10 10月更新1809的解决,我认为这是一个不仅影响我的问题,而且会影响我在我之后帮助多个人.如果您对此有不同看法,请随意撰写评论或提出修改建议.
我也不确定标签的"音频流"和"端点"是否应该在这种情况下使用,如果它们不应该或者你能想到更好的话,请提出编辑.
使用第三方软件'EarTrumpet'我能够克服"使命召唤"游戏的问题(重启后根本没有音频),但是,在我指定非默认端点后,"VLC媒体播放器"不会重启用'EarTrumpet'直到我再次关闭'EarTrumpet'并且'Tom Clancy的Rainbow Six Siege'的问题仍然存在. …
我刚刚遇到了一个意想不到的行为,Where-Object我找不到任何解释:
$foo = $null | Where-Object {$false}
$foo -eq $null
> True
($null, 1 | Measure-Object).Count
> 1
($foo, 1 | Measure-Object).Count
> 1
($null, $null, 1 | Measure-Object).Count
> 1
($foo, $foo, 1 | Measure-Object).Count
> 0
Run Code Online (Sandbox Code Playgroud)
如果 的条件Where-Object为假,$foo则应该为$null(这看起来是正确的)。
然而,$foo在任何值进入管道之前至少进行两次管道传输似乎会破坏它。
是什么原因造成的?
其他不一致之处:
($foo, $null, 1 | Measure-Object).Count
> 1
($foo, $null, $foo, 1 | Measure-Object).Count
> 0
($null, $foo, $null, 1 | Measure-Object).Count
> 1
($foo, 1, $foo, $foo …Run Code Online (Sandbox Code Playgroud) 为什么Start-Process powershell.exe { Read-Host }有效,但Start-Process pwsh.exe { Read-Host }不起作用?
我知道 的-ArgumentList切换Start-Process,但是当涉及转义引号时,它使事情变得更加复杂:
PowerShell 7.0.3 和 7.2.0-preview.3:
Start-Process pwsh.exe -ArgumentList '-Command "& {
    ''Hello World.''
    Read-Host
}"' -Verb RunAs
Run Code Online (Sandbox Code Playgroud)
PowerShell 5.1:
Start-Process powershell.exe { 
    'Hello World.'
    Read-Host
} -Verb RunAs
Run Code Online (Sandbox Code Playgroud)
另一方面,当创建新的 PowerShell 会话(不带Start-Process)时,仍然可以使用脚本块:
pwsh.exe {
    'Hello World.'
    Read-Host
}
Run Code Online (Sandbox Code Playgroud)
我在这里遗漏了一些东西还是有更好/不同的方法允许脚本块与脚本的其余部分并行执行?
powershell start-process scriptblock powershell-core powershell-7.0