在命令行中调整Mac的系统音量
摘要
一篇博文介绍了如何使用AppleScript在命令行中调整Mac的系统音量,并提供了一个自定义的bash脚本以便更轻松地控制。
<p><a href="https://lobste.rs/s/vda4gq/adjusting_mac_s_system_volume_on_command">评论</a></p>
查看缓存全文
缓存时间: 2026/05/23 12:45
# 在命令行中调整 Mac 的系统音量
来源:https://excessivelyadequate.com/posts/vol.html
由于我大概已经 270 岁了,习惯在*电脑*上听音乐(还是 MP3 文件!),而不是用智能音箱,有时我想调整 Mac 的系统音量,却不想从沙发上起身。肯定有不少 iOS 应用能实现这一点,附带着各种追踪和应用内购买——但再次强调,我几乎 270 岁了,所以更倾向于通过 SSH (https://www.termius.com/ios) 连接到我的电脑,然后运行一条命令。
感谢AppleScript (https://en.wikipedia.org/wiki/AppleScript),实现这一功能的技巧被控制在最小范围内:记住,内置的`osascript`工具执行 AppleScript 代码,运行...
``
osascript -e "set volume output volume 100"
``
...会将音量调到最大——数字被解释为百分比。你也可以将音量调高或调低若干百分点:
``
osascript -e "set volume output volume (output volume of (get volume settings) - 42)"
``
...或者(取消)静音电脑:
``
osascript -e "set volume with output muted"
osascript -e "set volume without output muted"
``
但如你所见,这些命令有点不直观,而且*非常*笨拙。为了在“懒人沙发土豆”的用例中提供更好的用户体验,我写了几行 bash 脚本,可以更少敲键地访问这些音量控制:
``
#!/bin/bash
USAGE="用法:vol [-h | --help | 数值_从_0_到_100 | -递减 | +递增]"
# 如果参数不是预期的值,显示使用说明
if [ "$1" == "-h" ] || [ "$1" == "--help" ] || ! [[ "$1" =~ ^$|^[+-]?[0-9]+$ ]]; then
echo "$USAGE"
exit 1
fi
# 获取旧音量
OLD_VOLUME="$(osascript -e "output volume of (get volume settings)")"
if [ -z "$1" ]; then
echo "$OLD_VOLUME %"
else
# 默认情况:将音量设置为指定值
NEW_VOLUME="$1"
# 或者:递减或递增?
if [[ "$1" == -* ]] || [[ "$1" == +* ]]; then
NEW_VOLUME=$(($OLD_VOLUME + $1))
fi
# 限制在 [0, 100] 范围内
if [ "$NEW_VOLUME" -lt 0 ] ; then
NEW_VOLUME=0
fi
if [ "$NEW_VOLUME" -gt 100 ] ; then
NEW_VOLUME=100
fi
# 给出反馈
MUTED=""
if [ "$NEW_VOLUME" -eq 0 ]; then
MUTED="(已静音)"
fi
echo "$OLD_VOLUME % -> $NEW_VOLUME % $MUTED"
# 设置
osascript -e "set volume output volume $NEW_VOLUME"
fi
``
你也可以在GitHub (https://github.com/doersino/vol)上找到这个脚本。
将这些代码行粘贴到一个名为`vol`的文件中,把它放在`$PATH`路径下的某个目录里,并确保该文件是可执行的:例如,运行`chmod u+x vol`。
(一个常见的目录选择是`~/local/bin`——你可以通过将`export PATH="$HOME/local/bin:$PATH`添加到你的`.bashrc`和/或`.bash_profile` (https://linuxize.com/post/bashrc-vs-bash-profile/) 来将其纳入`$PATH`——但我倾向于将这样的小工具作为函数维护在我的`.bashrc` (https://github.com/doersino/dotfiles/blob/master/.bashrc) 中。萝卜青菜,各有所爱。)
以下是使用由此创建的`vol`命令的方法:
``
$ vol --help
用法:vol [-h | --help | 数值_从_0_到_100 | -递减 | +递增]
``
``
$ vol 0
26% -> 0%(已静音)
``
但等等,还有更多!
## 从命令行控制你的音乐播放器https://excessivelyadequate.com/posts/vol.html#controlling-your-music-player-from-the-command-line
我使用的第一个 Apple 产品是 iTunes(在 Windows Vista 上!),我一直用它直到它更名为*Music*。然后我切换到了Swinsian (https://swinsian.com/),一个原生、快速、极简但功能齐全的音乐播放器。所有这三个应用——iTunes、Music 和 Swinsian——都支持一组共享的 AppleScript 钩子,下面的脚本就利用了这一特性:
``
# 选择可用的播放器,优先选择 Swinsian,然后是 Music,最后是 iTunes
PLAYER="iTunes"
if [ -d "/System/Applications/Music.app" ]; then
PLAYER="Music"
fi
if [ -d "/Applications/Swinsian.app" ]; then
PLAYER="Swinsian"
fi
# 执行操作
if [ -z "$1" ]; then
osascript -e "tell application \"$PLAYER\" to playpause"
elif [ "$1" = "?" ]; then
osascript -e "tell application \"$PLAYER\" to get name of current track"
printf "\033[90mby \033[0m"
osascript -e "tell application \"$PLAYER\" to get artist of current track"
printf "\033[90mon \033[0m"
osascript -e "tell application \"$PLAYER\" to get album of current track"
elif [ "$1" = "prev" ]; then
osascript -e "tell application \"$PLAYER\" to play previous track"
elif [ "$1" = "next" ]; then
osascript -e "tell application \"$PLAYER\" to play next track"
else
osascript -e "tell application \"$PLAYER\" to $1"
fi
``
如上所述,将这段代码粘贴到一个可执行文件中——我的文件名叫`it`,是*iTunes*的缩写。完成后,运行`it`命令不带任何参数将暂停或恢复播放,加上`?`会打印当前播放曲目的信息,而`prev`和`next`则如你预期般工作。其他任何参数都会被直接传递给播放器,从而可以进行临时查询。(首次运行时会弹出一个窗口,要求你同意你的音乐播放器通过 AppleScript 进行控制。)
相似文章
SOUND
SOUND 是一款 macOS 应用程序,提供从菜单栏进行每个应用程序的音频均衡、音量控制和扬声器选择,解决了内置应用级别音频设置缺失的问题。
SoundPipe
SoundPipe 是一款适用于 Mac 的调音台应用程序。
LocalClicky
LocalClicky 是一款让你用语音控制 Mac 的工具,所有处理都在本地设备上完成。
Sound Warden
Sound Warden 是一款 macOS 实用工具,可自动将每个应用的音频路由到所需的音频设备。
macOS defaults 命令演示列表
一份精选的 macOS `defaults` 命令列表,包含交互式演示,使用户能够通过命令行自定义系统和应用程序偏好设置。