SoundSwitch CLI 命令行接口完全指南:脚本化音频切换、配置档管理与麦克风静音自动化
发布时间:2026/10/4 14:42:26 作者:尧图编辑部 阅读量:1,286

桌面应用【免费下载链接】SoundSwitchC# application to switch default playing device. Download: https://soundswitch.aaflalo.me/项目地址https://gitcode.com/gh_mirrors/so/SoundSwitch点击查看免费下载SoundSwitch 附带了一个命令行接口SoundSwitch.CLI面向希望从脚本、快捷方式或自动化工具中控制音频设备的高级用户。借助它你可以随时切换默认播放/录制设备、管理音频配置文件Profile、控制麦克风静音状态、查询当前设备状态所有命令均支持--json机器可读输出便于在 PowerShell、批处理、任务计划等场景中进一步编排。本文将以仓库中的官方 CLI 文档website/src/usage/cli.md为骨架并结合SoundSwitch.CLI项目的真实源码从命令语法、JSON 输出格式、错误处理到 IPC 通信原理做一次完整的实战讲解。一、SoundSwitch.CLI 是什么SoundSwitch.CLI是 SoundSwitch 主程序自带的一个独立可执行命令行工具位于仓库的 SoundSwitch.CLI 目录项目文件SoundSwitch.CLI.csproj。它本身不做音频切换的底层工作而是通过命名管道Named Pipe与正在运行的主进程通信把用户意图转交给主程序执行。因此使用前请确保主程序 SoundSwitch 正在运行否则 CLI 无法连接管道并会报错命令行返回的结果如切换是否成功、当前状态实际来自主程序对管道请求的处理结果。从源码结构看CLI 使用了 Spectre.Console.Cli 构建命令体系入口文件 Program.cs 注册了 6 个子命令每个命令同时提供人类可读输出默认与--json机器可读输出两种模式。二、快速开始帮助与版本直接运行可执行文件即可查看全部命令与语法SoundSwitch.CLI.exe --help SoundSwitch.CLI.exe --version--help会列出所有已注册命令及示例这些示例来自 Program.cs 中的WithExample配置--version输出版本信息。每个子命令也都支持--help例如SoundSwitch.CLI.exe switch --help可查看该命令的专属参数说明。提示在 Windows 上你可以将SoundSwitch.CLI.exe的完整路径加入PATH之后即可在任意终端、.bat脚本或 PowerShell 中直接调用SoundSwitch.CLI。三、可用命令总览CLI 提供以下六类能力对应 Program.cs 中的六个命令注册命令能力说明switch在可用的播放或录制设备之间循环切换与主程序热键切换行为一致mute查询、设置或切换默认通信麦克风的静音状态profile列出已保存的音频配置档或激活指定名称的配置档settings打开 SoundSwitch 设置窗口status显示当前激活的配置档与默认音频端点播放、录制、通信devices列出当前已激活且已在 SoundSwitch 设置中被勾选参与切换的设备四、命令详解与实战示例4.1 switch切换播放/录制设备切换设备是最常用的能力语法为SoundSwitch.CLI.exe switch --type Playback SoundSwitch.CLI.exe switch --type Recording SoundSwitch.CLI.exe switch --type Playback --json--type或-t取值Playback/Recording分别对应循环切换下一个播放设备或下一个录制设备不加--json时终端会显示一个临时的状态提示成功时输出Successfully switched ... device加--json时输出机器可读 JSON。从实现看SwitchCommand.cs命令会向主进程发送TriggerSwitchRequest成功后输出{ success: true, type: Playback }失败则输出{ error: ... }并以退出码 1 结束。4.2 mute麦克风静音控制mute命令既可以查询当前状态也可以静音/取消静音SoundSwitch.CLI.exe mute # 查询当前静音状态 SoundSwitch.CLI.exe mute --state true # 静音 SoundSwitch.CLI.exe mute -s false # 取消静音-s 是 --state 的简写 SoundSwitch.CLI.exe mute --toggle # 切换静音状态-t 为简写 SoundSwitch.CLI.exe mute --json # 以 JSON 查询当前状态关键行为见 MuteCommand.cs不带任何动作参数时仅查询并展示当前默认麦克风的静音状态指定--state或--toggle时会先查询当前状态若目标状态与当前状态一致则不做多余操作幂等设计加--json时无论查询还是执行输出格式统一为{ deviceName: Microphone (USB Audio Device), isMuted: false }失败时输出{ error: ... }并以退出码 1 结束。若系统未设置默认麦克风该命令会报错。4.3 profile配置档管理与激活音频配置档是 SoundSwitch 的核心概念之一保存了播放、录制、通信设备的一组绑定关系。profile命令提供两个操作列出全部配置档SoundSwitch.CLI.exe profile --list SoundSwitch.CLI.exe profile --list --json--json变体输出一个配置档对象的数组每个对象包含name、playbackDevice、playbackCommunicationDevice、recordingDevice、recordingCommunicationDevice五个字段字段映射见 ProfileCommand.cs[ { name: Gaming, playbackDevice: Speakers (Realtek(R) Audio), playbackCommunicationDevice: Headset Earphone (HyperX Cloud II), recordingDevice: Microphone (USB Audio Device), recordingCommunicationDevice: Headset Microphone (HyperX Cloud II) } ]激活指定配置档SoundSwitch.CLI.exe profile --name Gaming SoundSwitch.CLI.exe profile --name Gaming --json-n/--name用于指定配置档名称名称需与设置窗口中保存的完全一致成功时 JSON 输出{ success: true, profile: Gaming }若既没有--list也没有--name命令会直接报错 Profile name is required unless --list is specified见 ProfileCommand.cs配置档名称无效时同样返回错误并以退出码 1 结束。4.4 settings打开设置窗口SoundSwitch.CLI.exe settings SoundSwitch.CLI.exe settings --json该命令请求主程序打开设置窗口见 SettingsCommand.csJSON 模式成功时输出{ success: true }失败时输出{ error: ... }并以退出码 1 结束。4.5 status查询当前状态status一次性返回当前激活的配置档和四个默认音频端点SoundSwitch.CLI.exe status # 人类可读的表格输出 SoundSwitch.CLI.exe status --json # 机器可读 JSON默认表格模式下会以美观的圆角边框表格展示Active Profile、Playback、Recording、Playback Comm、Recording Comm五行见 StatusCommand.cs。JSON 模式输出字段名与 StatusCommand.cs 一一对应{ activeProfile: Gaming, playbackDevice: Speakers (Realtek(R) Audio), recordingDevice: Microphone (USB Audio Device), playbackCommunicationDevice: Headset Earphone (HyperX Cloud II), recordingCommunicationDevice: Headset Microphone (HyperX Cloud II) }两个重要的语义约定activeProfile为null表示自程序启动以来尚未触发过任何配置档设备字段为空字符串表示当前不存在匹配的设备。另外需要特别说明activeProfile只反映最近一次由用户操作或触发器显式激活的配置档它不会追踪 SoundSwitch 之外的变化例如直接在 Windows 声音设置中手动改动的设备请勿把它当作系统级实时状态。4.6 devices列出可切换设备devices用于查询SoundSwitch 将会循环切换的设备——即当前已激活在线且已在设置中被勾选参与切换的设备SoundSwitch.CLI.exe devices SoundSwitch.CLI.exe devices --jsonJSON 输出按播放/录制分组字段与 DevicesCommand.cs 对应{ playbackDevices: [ Speakers (Realtek(R) Audio), Headset Earphone (HyperX Cloud II) ], recordingDevices: [ Microphone (USB Audio Device) ] }注意它与status的差异status返回的是系统当前的默认端点而devices返回的是被勾选参与切换的候选设备列表可能多于当前默认设备。失败时同样输出{ error: ... }并以退出码 1 结束。五、--json输出约定与错误处理所有命令都继承自JsonCommandSettings见 JsonCommandSettings.cs因此统一支持--json选项无需额外记忆。这一约定的核心目的是脚本友好输出通道JSON 一律通过Console.Out写入标准输出见 JsonOutput.cs可直接用管道交给jq等工具解析或捕获到变量无 ANSI 污染JSON 路径下禁止使用 Spectre.Console 的标记与转义序列避免破坏管道输出这是 JsonOutput.cs 注释中明确的设计约束格式化使用System.Text.Json并以缩进格式输出WriteIndented true可读性好退出码成功返回 0失败返回 1失败时 stdout 输出统一格式的 JSON 错误对象{ error: Failed to retrieve status }动作类命令switch、mute、settings、profile --name的成功响应形态如下命令成功 JSONswitch{ success: true, type: Playback }mute{ deviceName: ..., isMuted: false }settings{ success: true }profile --name{ success: true, profile: Gaming }常见错误场景完整清单见 SoundSwitch.CLI/README.mdSoundSwitch 主程序未运行管道连接失败配置档名称无效profile --name指定了不存在的名称管道连接问题主程序繁忙、超时等提供了无效的命令或选项系统未设置默认麦克风执行mute命令时。六、底层原理CLI 如何与主程序通信理解 CLI 的价值有必要看一眼它的 IPC 实现。所有命令最终都调用NamedPipe.SendRequestAsyncTResponse见 SoundSwitch.IPC/Pipe/NamedPipe.cs管道命名管道名由PipeConstants.GetUserPipeName()生成格式为SoundSwitch 当前 Windows 用户名见 PipeConstants.cs即SoundSwitchJohnDoe这种形式保证同一台机器上不同用户互不干扰连接客户端以异步方式连接连接超时 5 秒建立连接后以4 字节长度前缀 消息体的帧格式收发数据序列化请求与响应使用MessagePack高效二进制序列化而非 JSON既减小了体积也提升速度响应超时客户端等待服务端响应的超时时间为 15 秒超时后抛出TimeoutException并清理连接最终由 CLI 以{ error: ... } 退出码 1 呈现给用户服务端主程序一侧通过StartListening启动管道服务将收到的请求分发给注册的消息处理器ProcessRequestAsync见 NamedPipe.cs并在连接空闲 10 秒后主动断开闲置客户端。正是这种薄客户端 厚主程序的架构让 CLI 命令与主程序托盘/热键触发的切换走的是同一条设备管理链路行为一致、无需重复实现音频 API 逻辑。七、自动化实战场景场景 1PowerShell 一键切换并读取结果$result SoundSwitch.CLI.exe switch --type Playback --json | ConvertFrom-Json if ($result.success) { Write-Host 已切换到下一个播放设备 } else { Write-Host 失败$($result.error) }场景 2按应用场景切换整套配置SoundSwitch.CLI.exe profile --name Gaming SoundSwitch.CLI.exe profile --name Headphones Mic适合放进游戏启动器、Steam 启动选项或 AHK 脚本中实现开游戏自动切耳机、关游戏自动切音箱。场景 3会议开始前静音麦克风SoundSwitch.CLI.exe mute -s true # 静音 SoundSwitch.CLI.exe mute -t # 会议中想说话时再切换 SoundSwitch.CLI.exe mute -s false # 会议结束取消静音场景 4结合任务计划程序定时巡检设备状态SoundSwitch.CLI.exe status --json SoundSwitch.CLI.exe devices --json可将两者输出写入日志文件用于排障或监控设备插拔后的切换候选是否齐全。八、总结SoundSwitch.CLI把主程序的核心能力完整暴露给了命令行switch设备切换、mute麦克风静音、profile配置档管理、settings打开设置、status状态查询、devices可切换设备列表并通过统一的--json约定与错误对象 退出码 1的错误协议让脚本集成变得可靠。底层基于命名管道与 MessagePack 与主程序通信因此务必保证主程序正在运行。更多源码级细节可继续阅读 SoundSwitch.CLI/README.md 以及本仓库的 SoundSwitch.CLI/Program.cs 与各命令实现文件。赞分享桌面应用【免费下载链接】SoundSwitchC# application to switch default playing device. Download: https://soundswitch.aaflalo.me/项目地址https://gitcode.com/gh_mirrors/so/SoundSwitch点击查看免费下载相关推荐SoundSwitch 录音设备配置指南Recording 标签页的设备轮换与麦克风静音热键SoundSwitch 录音设备配置指南Recording 标签页的设备轮换与麦克风静音热键 本篇指南聚焦 SoundSwitch 设置窗口中的 Record桌面应用JavaGuide项目解析深入理解MySQL中SQL语句的执行过程JavaGuide项目解析深入理解MySQL中SQL语句的执行过程 本文基于JavaGuide开源项目深度解析MySQL中SQL语句的完整执行流程涵盖查询桌面应用终极B站视频下载神器Bilidown一键保存所有精彩内容完整指南终极B站视频下载神器Bilidown一键保存所有精彩内容完整指南 还在为B站视频无法离线观看而烦恼吗Bilidown作为一款功能强大的哔哩哔哩视频下载工具桌面应用音视频上一篇如何精准控制Windows窗口大小开源Window Resizer终极指南下一篇如何轻松编辑幻兽帕鲁存档palworld-save-tools的完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考