windows11自动切换音频输入和输出设备

1,827 阅读4分钟

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 软件

下载地址:

www.nirsoft.net/utils/nircm…

选择适合的版本下载,该软件不需要安装,仅解压即可

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 版本并安装。

www.autohotkey.com/

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. 使用方法

  1. 双击 audio_switch.ahk 快捷键,运行快捷键示例(需保持该示例一直运行,不可关闭),任务栏会出现 如下图标:

  1. 按下热键 Ctrl+Alt+A 即可实现音频输入输出设备的切换。

1.8. 更简单的方式

可以参考 B 站用户的另一种方式:为每一个音频设备创建一个快捷键,需要切换到哪个设备就双击哪个快捷键。视频链接如下:

【一键快速切换音频设备 打游戏用耳机 看视频用音响】www.bilibili.com/video/BV1oa…