AppleScript 不能直接控制 macOS 音频设备物理切换,但可作为调度中枢配合 SwitchAudioSource 等工具实现自动路由;支持进程监听触发、菜单栏模拟点击及快捷指令集成,需注意权限、版本兼容性与输入/输出设备区分。
applescript 本身不能直接控制 macos 音频设备的物理切换,但它可以作为“触发器”和“协调层”,配合命令行工具(如 switchaudiosource)或系统服务,实现基于应用状态、时间或用户操作的音频路由自动切换。关键在于把 applescript 当作自动化流程的调度中枢,而不是音频驱动本身。
用 AppleScript 监测应用启动并切换输出设备
这是最常用且实用的场景:当某个会议或录音类应用启动时,自动切到对应耳机或麦克风。AppleScript 通过轮询进程列表来判断应用是否活跃,再调用外部命令完成切换:
- 需提前安装 SwitchAudioSource(命令行工具),支持 macOS 12–14,Apple Silicon 兼容
- 脚本示例(保存为 .scpt 文件):
tell application "System Events" if exists process "zoom.us" then do shell script "/usr/local/bin/SwitchAudioSource -s 'AirPods'" else if exists process "Logic Pro" then do shell script "/usr/local/bin/SwitchAudioSource -s 'Focusrite USB Audio'" end if end tell - 该脚本需配合定时执行(如每5秒运行一次),可用
launchd或 Automator 定时启动;也可嵌入 Hammerspoon 中实现事件驱动,降低轮询开销
结合菜单栏音量图标模拟点击切换
当无法或不愿安装第三方命令行工具时,AppleScript 可模拟用户操作,点击菜单栏音量图标并选择设备——依赖 UI 元素可访问性,稳定性略低于命令行方案,但无需额外依赖:
Apple Silicon AI — 在 Mac Studio、Mac Mini、MacBook Pro 和 Mac Pro 上运行大语言模型(LLM)、图像生成、语音转文字及嵌入(embeddings)。将您的 Apple Silicon 设备…
- 确保系统设置中已启用“在菜单栏中显示音量”
- 脚本需开启“辅助功能”权限(系统设置 > 隐私与安全性 > 辅助功能)
- 核心逻辑示例:
tell application "System Events" click (menu bar item 1 of menu bar 1 of application process "ControlCenter") delay 0.3 click (menu item "AirPods" of menu 1 of menu bar item 1 of menu bar 1 of application process "ControlCenter") end tell - 注意:设备名称必须与菜单中显示的**完全一致**(含空格、大小写、括号),建议先用 Accessibility Inspector 工具确认元素路径
封装为快捷指令或 Automator 服务提升可用性
单独运行 AppleScript 效率低,应将其集成进系统级触发机制中,让切换真正“一键生效”:
- 在 Automator 中新建“快速操作”(Quick Action),添加“运行 AppleScript”动作,粘贴上述任一脚本
- 保存后前往系统设置 > 键盘 > 快捷键 > 服务,为其分配全局热键(如 ⌘⌥A)
- 或导入快捷指令 App,创建“运行脚本”操作,支持 Siri 唤醒或小组件调用
- 进阶:用 Hammerspoon 的
application.watcherAPI 替代轮询,监听 app launch/unload 事件,响应更及时、CPU 占用更低
限制与注意事项
AppleScript 不是万能胶,实际使用中需避开几个典型坑:
- 无实时音频流控制能力:它不能修改正在播放的应用的音频输出目标(如强制 Spotify 输出到 Soundflower),只能切换系统默认输出设备
-
不处理输入设备切换:同理,需额外调用
SwitchAudioSource -t input -s "USB Mic",且部分麦克风需重启应用才生效 -
macOS 版本差异:Sonoma / Sequoia 中 ControlCenter 进程名和 UI 层级有调整,旧脚本可能失效,建议优先采用
SwitchAudioSource命令行方式 -
权限与签名问题:AppleScript 调用
do shell script时若涉及管理员权限(如加载 kext),需配合sudo并预设密码或配置免密策略,不推荐用于日常切换


















