通过执行批处理文件/ powershell脚本来设置回放设备

时间:2012-03-23 11:35:44

标签: audio powershell batch-file powershell-v2.0 playback

我的计算机(Windows 7)连接到电视,我经常在数字音频(S / PDIF)(高清晰度音频设备)和我的耳机(2- Corsair CA)之间更改输出设备的声音-HS1 USB耳机)

我希望能够执行批量/脚本文件,为我更改此内容,因此我无需“右键单击音量>播放设备>”标记输出设备“并单击”设置默认值“。

我知道这是一个奢侈品问题,但是,嘿,也许我可以从别人那里学到一些东西?

所有帮助表示赞赏!

8 个答案:

答案 0 :(得分:22)

这就是我设置'第1行'作为播放设备:

start /min "" G:\......\nircmd.exe setdefaultsounddevice "Line 1"

NirCmd是一个小型命令行实用程序,您可以下载该实用程序,允许您在不显示任何用户界面的情况下执行一些有用的任务。

答案 1 :(得分:9)

我有与你自己完全相同的要求,并且在你的帖子发现后我发现了以下内容:

https://web.archive.org/web/20131231034118/http://downloadsquad.switched.com/2010/06/16/windows-7-tip-how-to-change-the-default-audio-device-with-a-hot/

不幸的是,它不是原生的Windows功能;它需要下载一个名为AutoHotKey的小型开源脚本工具,但它运行良好,只需要少量内存(1~2.5Mb)

原始文章中提供的脚本对我不起作用。它正在搜索启用/禁用设备并更改该值,而不是更改默认设备。 我编辑它现在在2个默认设备之间切换。 它的工作原理是打开声音控制面板(mmsys.cpl),然后将播放设备列表向下滚动到列表中的第二个项目(即{Down 2}部分)。 这是因为我的演讲者是我列表中的第二项。 然后检查设备是否是默认设备。如果没有,则将其设置为默认值并关闭窗口。如果它已经是默认值,则向下滚动2次并将其设置为默认值。

因此,您需要修改{Down 2}行以适合您自己的设备列表。

 #+a::
Run, mmsys.cpl
WinWait,Sound
ControlSend,SysListView321,{Down 2}
ControlGet, selectedDevice, List, Focused, SysListView321
Loop, Parse, selectedDevice, %A_Tab%
    if a_index <> 3
        continue
    else 
    {
        if A_LoopField <> Default Device
        {
            ControlClick,&Set Default
            ControlClick,OK
            WinWaitClose
            SoundPlay, *-1
            return
        }
        else
        {
            ControlSend,SysListView321,{Down 2}
            ControlClick,&Set Default
            ControlClick,OK
            WinWaitClose
            SoundPlay, *-1
            return
    }       
}

答案 2 :(得分:2)

据我所知,没有办法以编程方式执行此操作。这是一个深思熟虑的设计,因为Microsoft不希望应用程序覆盖用户设置的音频设置。

您会找到相同的答案here,但如果您使用操作窗口的解决方案,则可以查看here

答案 3 :(得分:2)

要跟进Dale Newton's帖子,NirCmd是一个很好的方法。最重要的是,如果你将它与AutoHotKey配对,你可以创建一个可执行文件来更改你的设备,而不必在每次运行时打开讨厌的CMD窗口。例如,我有两个源,我一直在切换,一个是我的耳机,另一个是我的显示器。对于我的显示器,我创建了一个执行此操作的ahk脚本:

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir% ;I have nircmd in the same folder as these scripts
Run, nircmd setdefaultsounddevice "Acer X34-8" 1
Run, nircmd setdefaultsounddevice "Acer X34-8" 2

另一个用于我最后两行的耳机改为:

Run, nircmd setdefaultsounddevice "Headset Earphone" 1
Run, nircmd setdefaultsounddevice "Headset Earphone" 2

之后你可以将每个ahk脚本编译成一个exe并将每个exe绑定到一个键盘宏,这样你就可以通过几次按键来执行它们。就个人而言,我正在使用Corsair K95,因此我使用他们的软件将这些软件绑定到我的G&#39;密钥。

另请注意,如果您处于声音首选项中,则可以重命名任何设备以避免命名冲突。

答案 4 :(得分:2)

以下脚本是在Windows 7中编写的,并使用sendkeys。它基于我发现的其他片段,但添加到它们以确保选择是一致的并且不会显示杂散窗口。 如果系统仍在播放,您可能需要为系统调整SleepTime。 使用快捷方式调用脚本,并将要在“回放设备”窗口中选择的项目的索引作为第一个参数。 您可以创建一个新的工具栏&#39;在你的任务栏上#39;只需单击一下即可选择每个设备: Taskbar toolbar picture

'===============================================================================
'This script uses sendkeys to select the Sound Output device
'First parameter should be the desired device number in 'Playback Devices' list
'===============================================================================
Option Explicit

Const SleepTime = 200

Dim WindSh

'===============================================================================
'MAIN ROTUINE
'===============================================================================
'Check the command line input
if ( Wscript.Arguments.Count <> 1)  then
  MsgBox "You must provide a single integer arguement representing the device number", vbinformation + vbokonly, Wscript.ScriptName
  Wscript.Quit 1
elseif ( false = IsNumeric( Wscript.Arguments.Item(0) ) )  then
  MsgBox "The arguement provided was not an integer number: " & Wscript.Arguments.Item(0), vbinformation + vbokonly, Wscript.ScriptName
  Wscript.Quit 2
End If

set WindSh = CreateObject("Wscript.Shell")
WindSh.run("control.exe mmsys.cpl")
do while (WindSh.AppActivate("Sound") = false)
  WScript.Sleep SleepTime
loop
WindSh.sendkeys("{DOWN " & Clng( Wscript.Arguments.Item(0) ) & "}")
WScript.Sleep SleepTime
WindSh.sendkeys("{TAB 2}")
WScript.Sleep SleepTime
WindSh.sendkeys("{ENTER}")
WScript.Sleep SleepTime
WindSh.sendkeys("%{F4}")
WScript.Sleep SleepTime
if (WindSh.AppActivate("Sound") = true) then
  WindSh.sendkeys("%{F4}")
end if

答案 5 :(得分:0)

可能与通过脚本切换音频设备无关,但我也通过HDMI将电脑连接到电视上。

当我想在电视上观看视频文件时,我使用Media Player Classic Home Cinema - 这让我可以在选项中为MPH:HC指定音频设备,而无需在整台计算机上切换我的默认声音设备。

如果你的用法与我的相似,那么MPC:HC会为你解决问题。

答案 6 :(得分:0)

请注意,如果您在企业或教育环境登录脚本中使用“nircmd setdefaultsounddevice speaker”,则在插入耳机时,声音仍然会从扬声器中传出。

答案 7 :(得分:0)

我有一个不断更改其名称的HDMI设备,因此现有的解决方案都无法为我工作。

我最终得到了这个强大的功能,并使用了NirCmd应用程序。

$name = "SMART*"

# list active audio playback devices.   (Note for cature devices change Render to Capture)
$device = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\*\" | where {$_."DeviceState" -eq 1} | foreach-object -Process {(Get-ItemPropertyValue -Path ($_.PSPath + "\Properties\") -Name "{a45c254e-df1c-4efd-8020-67d146a850e0},2")} | Where-Object {$_ -like $name}

C:\bin\NIRCMDC setdefaultsounddevice $device 1
C:\bin\NIRCMDC setdefaultsounddevice $device 2