1. 准备工作
1.1. 安装AudioDeviceCmdlets 模块
在 powershell 中执行以下命令:
# 使用Get-AudioDevice命令(需要先安装 AudioDeviceCmdlets 模块)
# 首次使用需要先安装模块:
Install-Module -Name AudioDeviceCmdlets
1.2. 重命名可用的输入和输出设备名字
在上图中的重命名的位置对想要切换的音频名字进行修改,这一步主要是为了做区分,windows 对音频设备默认的名字比较乱,并且这个名字会在后续的代码中使用到,修改后名字的参考如下(名字中最好不要有特殊符号或者空格之类的,中文+字母即可):
上图中就是我需要自动切换的两个设备,分别为笔记本和蓝牙耳机的扬声器和麦克风。
1.3. 测试获取当前电脑正在使用的输入和输出设备的名称
依次运行以下命令
Get-AudioDevice -Playback | Select-Object -ExpandProperty Name
Get-AudioDevice -Recording | Select-Object -ExpandProperty Name
运行结果示例(当前使用的时蓝牙耳机的扬声器和麦克风):
可以看到前半部分正是我们修改后的名字
1.4. 下载 nircmd 软件
下载地址:
选择适合的版本下载,该软件不需要安装,仅解压即可
1.5. 创建命令脚本
脚本命名为“audio_switch.ps1”,并放到 nircmd 软件的相同目录下。
上面修改后的音频设备的输入和输出的名字在这点脚本中会用到。
代码内容不复杂,可以根据自己的需求修改,例如:要在三套音频的输入输出之间循环切换,可以再增加 if-else 判断,也可交给 AI 去修改。
# audio_switch.ps1
# 保存此文件时,请确保使用 UTF-8 with BOM 编码
# 设置输出编码为 UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# 加载Windows.UI.Notifications命名空间以显示通知
[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
# 显示通知的函数
function Show-Notification {
param (
[string]$Message
)
$AppId = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe"
$Template = @"
<toast>
<visual>
<binding template="ToastText01">
<text id="1">$Message</text>
</binding>
</visual>
</toast>
"@
$XmlDoc = New-Object Windows.Data.Xml.Dom.XmlDocument
$XmlDoc.LoadXml($Template)
$Toast = New-Object Windows.UI.Notifications.ToastNotification $XmlDoc
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($Toast)
}
# 定义设备名称(使用实际的设备名称)
$laptopSpeaker = "笔记本扬声器"
$laptopMic = "笔记本麦克风"
$bluetoothSpeaker = "迈从V9pro扬声器"
$bluetoothMic = "迈从V9pro麦克风"
$switchToSpeaker = ""
$switchToMic = ""
# 获取当前音频设备
$currentPlayback = Get-AudioDevice -Playback | Select-Object -ExpandProperty Name
$currentRecording = Get-AudioDevice -Recording | Select-Object -ExpandProperty Name
# 切换播放设备
if($currentPlayback -like "*笔记本扬声器*") {
# 切换到蓝牙扬声器
nircmd setdefaultsounddevice "$bluetoothSpeaker" 1
nircmd setdefaultsounddevice "$bluetoothSpeaker" 2
nircmd setdefaultsounddevice "$bluetoothSpeaker" 3
$switchToSpeaker=$bluetoothSpeaker
}
elseif($currentPlayback -like "*迈从V9pro扬声器*") {
# 切换到笔记本扬声器
nircmd setdefaultsounddevice "$laptopSpeaker" 1
nircmd setdefaultsounddevice "$laptopSpeaker" 2
nircmd setdefaultsounddevice "$laptopSpeaker" 3
$switchToSpeaker=$laptopSpeaker
}
# 切换录制设备
if($currentRecording -like "*笔记本麦克风*") {
# 切换到蓝牙麦克风
nircmd setdefaultsounddevice "$bluetoothMic" 1 Recorder
nircmd setdefaultsounddevice "$bluetoothMic" 2 Recorder
nircmd setdefaultsounddevice "$bluetoothMic" 3 Recorder
$switchToMic=$bluetoothMic
}
elseif($currentRecording -like "*迈从V9pro麦克风*") {
# 切换到笔记本麦克风
nircmd setdefaultsounddevice "$laptopMic" 1 Recorder
nircmd setdefaultsounddevice "$laptopMic" 2 Recorder
nircmd setdefaultsounddevice "$laptopMic" 3 Recorder
$switchToMic=$laptopMic
}
$message = "当前设备:`n播放: $currentPlayback`n录制: $currentRecording`n切换到:`n播放: $switchToSpeaker`n录制: $switchToMic"
Show-Notification $message
1.6. 创建脚本执行的快捷键
使用 windowspower 执行上面的脚本会有弹框,可通过创建快捷链接的方式避免弹框。
右键 audio_switch.ps1 文件创建快捷方式。
快捷键名为:audio_switch
目标中填入以下命令:
-File 后面填入你的 audio_switch.ps1 文件所在路径
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "D:\nircmd\audio_switch.ps1"
起始位置:D:\nircmd(你的脚本所在文件夹)
也可在快捷键中填入运行该快捷键链接的热键,例如:
Ctrl + Alt + A
到这里基本就完成了,此时双击快捷键 audio_switch 或者 按下热键Ctrl + Alt + A,即可完成音频输入和输出设备的切换,且通知栏会有切换通知,如下:
1.7. 热键失效解决
如果热键失效可能是热键重复导致的,可以通过 使用 AutoHotKey 解决。
下载 AutoHotKey 2.0 版本并安装。
1.7.1. 创建 audio_switch.ahk 快捷键
创建一个 audio_switch.ahk 文件(脚本路径更换为自己的):
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
^!a:: ; Ctrl+Alt+A
Run, powershell.exe -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "D:\nircmd\audio_switch.ps1",, Hide
return
1.7.2. 使用方法
- 双击
audio_switch.ahk快捷键,运行快捷键示例(需保持该示例一直运行,不可关闭),任务栏会出现 如下图标:
- 按下热键
Ctrl+Alt+A即可实现音频输入输出设备的切换。
1.8. 更简单的方式
可以参考 B 站用户的另一种方式:为每一个音频设备创建一个快捷键,需要切换到哪个设备就双击哪个快捷键。视频链接如下:
【一键快速切换音频设备 打游戏用耳机 看视频用音响】www.bilibili.com/video/BV1oa…