指南
Mac 无法通过光纤改变 Sonos 的音量?原因在这里。
你的 Mac 无法通过光纤线改变 Sonos 音箱的音量,因为这根线是单向的:TOSLINK 只把音频送出去,什么都不回传,所以没有任何通道能让音量指令走过去,而 macOS 会把自己这一侧的控制锁在满量程输出上。 办法有:用 Sonos 应用或遥控器、用一个条形音箱能学习的红外遥控器、改用 AirPlay 并放弃线缆——或者用一款菜单栏工具捕获音量键,把改动经你的网络发给音箱;只有最后这一种能同时保住线缆和按键。
键盘没有问题。 音箱没有问题。 下面讲清楚实际发生了什么、有哪些办法能解决(免费的也在内)、哪些办法没用,以及什么情况下你根本不需要装任何东西。
线缆只能单向
光纤线——TOSLINK、S/PDIF,就是插进那个背后透着红光的小方形插口的那根——是一条数字音频的管道。 采样沿着它走。 没有任何东西回传。 没有握手,没有回传通道,也没有音量指令。
所以当你在系统设置里选中那个输出时,macOS 是在把声音送进一个插口,却不知道另一端是什么。 它可能是一台 Sonos Ray。 它可能是一台功放,也可能什么都不是。 因为它无从知晓,所以它不会代你设定电平:信号以满量程输出,另一端是什么设备,就由它决定这有多响。
按下调高音量键——F12,调低是 F11,静音是 F10——而 macOS 没有任何可改的对象。 你会看到屏幕上的悬浮窗下面带着一个划掉的“禁止”符号,或者干脆没有悬浮窗;同时在“系统设置 → 声音”中,那个输出的滑块是灰的——macOS 可能会直接告诉你所选设备没有输出控制。 与此同时,音箱仍以上次留下的音量播放,这也正是为什么这个问题常常表现为:Sonos 卡在最大音量上,而 Mac 上怎么调都调不下来。
音量本来就在 Sonos 上,一直如此。 音箱完全知道该怎么把自己调小。 它没有办法听见你的请求。
如何判断你遇到的正是这个问题
- 你 Mac 的声音是通过一根实体线缆接入光纤或 S/PDIF 插口到达音箱的——通常来自一个 Thunderbolt 扩展坞或一个小型 USB 音频接口。 在“声音”设置里,这个输出的名称往往类似 Digital Out 或 USB SPDIF Out,而不是音箱自己的名字。
- 在“系统设置 → 声音”中,选中的输出音量滑块是灰的,或者提示它没有输出控制。
- Sonos 应用调音量毫无问题,如果有遥控器,遥控器也一样。
- 切到耳机,音量键立刻恢复工作。
如果这四点都成立,那就什么都没坏。 数字输出就是这么工作的。
这里常常把三个不同的问题混为一谈
- 播放、暂停和切歌键不控制 Sonos 应用。 不同的问题,不同的解法:那些是媒体键,Sonos 应用需要在“系统设置 → 隐私与安全性”中获得辅助功能权限,macOS 才会把它们交出去。 Sonos 自己的支持文章讲的正是这一点——而且仅此一点。 在光纤连接下,它碰不到音量。
- AirPlay 下音量表现异常。 如果你的 Mac 是通过无线方式播放到 Sonos,音量键本来就好用;那边的异常属于 AirPlay 的怪脾气,而不是缺了一条控制通道。 本页面的内容都不适用。
- 在光纤连接下音量键是死的。 本页面。 线缆没有办法承载这条指令,任何权限或设置都改变不了这一点。
哪些办法解决不了
重启或重装
没有任何东西处于异常状态,所以也没有什么需要靠重启来清除。 重置音频守护进程也是一样的道理。
更好的线缆或适配器
每一根 TOSLINK 线传输的都是同样的单向信号,每一个带这种插口的扩展坞也一样。 更贵的线也不会多出一条控制通道,因为这种格式本就没有。
一个你还没找到的设置
系统设置里没有哪个开关能凭空给线缆一样它本就没有的东西。 “音频 MIDI 设置”也做不到:多输出设备或聚合设备改变的是 macOS 如何路由音频,而不是一根单向线缆能承载什么,其中的数字输出照样是固定的。
一款键位重映射工具
通常不会。 音量键并非普通按键:macOS 把它们作为系统定义事件投递,且没有公开的热键 API,所以快捷键工具通常根本看不到它们。 多数人最后会绑定另一组组合键,这确实管用,同时也意味着又多了一个要记的快捷键。
已经过时的建议
这个问题所在的讨论帖已有十年之久,其中一些最好的答案如今已经失效。 免得你为此耗掉一个晚上:
- “用 Sonos 桌面版应用的快捷键”——包括那些把音量键映射到它的 Cmd + = 和 Cmd + − 的 BetterTouchTool 方案。 Sonos 已于 2024 年 5 月停止提供桌面控制器;所有指向它的映射如今都指向了空处。
- “用 Soundflower 转一道”——那些老教程依赖的这个环回驱动已多年无人维护,在当前的 macOS 上根本跑不起来。
- “音量键无法被截获”——老论坛的回答里反复这么说,如今已不再成立。 macOS 把音量键作为系统定义事件投递,而持有辅助功能权限的应用可以用事件监听捕获它们。 那些真正有效的解决办法,用的正是这个思路。
什么情况下你根本不需要这些
这一点值得直说,因为在这里很容易买错东西。
- 如果你是通过 AirPlay 播放到 Sonos,你的音量键本来就好用。 macOS 知道那台音箱在,会替你把音量带过去。 这个顺序是不是搞反了,是个真问题,光纤与 AirPlay 的对比如实梳理了它。
- 如果你的 Mac 是通过耳机口接入 Sonos 的线路输入——用的是模拟线而不是光纤线——音量键同样管用,因为 macOS 会在声音离开 Mac 之前自行设定电平。
- 如果你的 Sonos 是由电视馈入的,而你的 Mac 不在这条链路上,那这根本不是你会遇到的问题。
本页面讲的是这样一个具体情形:音频从 Mac 上的一个实体光纤或 S/PDIF 接口输出。
那到底怎么用 Mac 键盘控制 Sonos 音量?
五个真正的答案,大致按代价从低到高排列。
- Sonos 应用,或者音箱的遥控器。 永远管用,免费,代价是每次音量稍有不对,你都得伸手去够点什么。
- 教条形音箱学一个红外遥控器。 Sonos 条形音箱可以在 Sonos 应用的设置里学习几乎任何红外遥控器,所以一个闲置的电视遥控器就能解决整个房间的音量问题——抽屉里要是有一个,这办法还免费。 不过那终究是个遥控器:要对准、桌上又多一样东西,而且你的键盘对它一无所知。
- 软件衰减器(SoundSource、eqMac 之类)会在音频离开 Mac 之前插入一级音量控制,这确实能让音量键在光纤输出下重新可用。 这笔取舍恰恰否定了当初选线缆的理由:输出不再是那条未经触碰的满量程比特流——每一个采样在输出途中都被软件缩放过。
- 改用 AirPlay。 音量键立刻就回来了,但网络缓冲也跟着一起回来——延迟,以及落在画面后面的声音。 光纤与 AirPlay 的对比如实权衡了这一点。
- 留住线缆,转发按键。 让音频在光纤线上原封不动,把按键单独经网络送到那台本就知道该怎么处理它的音箱。 下面讲的就是 Optically 所做的事。
Optically 是怎么处理的
Optically 就是一款做第三件事的 macOS 菜单栏应用。 它会抢在 macOS 处理之前捕获调高音量、调低音量和静音键,并通过你的本地网络请求 Sonos 改变自身音量。 完整过程如下:
- 辅助功能权限,因为事件监听是抢在 macOS 之前捕获系统定义按键的唯一途径。 它只作用于三个键,不读取其他按键,也不存储你输入的任何内容。
- 本地网络权限,因为查找音箱的方式是向本地网络询问有哪些设备。 它使用 Sonos 本就接受的本地控制方式直接与音箱通信——没有 Sonos 账户,也没有云 API。
- 音量键绑定在一个输出上,所以插上耳机就会立刻把它们交还给 macOS。 在你选定之前,Optically 不会去猜,而是让它们保持原样。
- 显示的音量是音箱自身的音量,通过网络读回而非凭空推测,所以在 Sonos 应用里做的改动也会同步显示在你的 Mac 上。
- 没有任何环节等待网络,也没有任何东西碰到音频。 悬浮窗会立即绘制,指令随后跟上;声音自始至终都不经过应用。
它需要 macOS 14.4 或更高版本,免费运行 14 天,之后一台 Mac 收费 $10,每多一台加 $5。 它是经过公证的下载版,而不是 Mac App Store 应用:App Review 的审核指南把音量控制列入了应用不得更改之列。
相关问题
它能配合 Sonos Beam 或 Arc 吗?
只要是你网络上接受本地控制的 Sonos,音量和静音都能用,所以应用这一侧没有区别。 硬件这一侧就不一样了。 自带光纤输入的 Sonos 型号是 Ray、Playbar 和 Playbase。 仅有 HDMI 的条形音箱需要在线缆和音箱之间加一个 Sonos 光纤音频适配器——Beam 随机附带一个,其他型号则需另行购买。
这一切会影响音质吗?
不是。 音频从不经过 Optically。 你的 Mac 依旧把同样的 PCM 送进同一根线缆,应用只承载按键本身。 把它卸载,声音仍然一模一样,因为声音本来就没经过它。
本来是好的,现在音量键又不工作了
每当 Optically 决定不转发某个按键时,都会在菜单栏说明原因——缺少某项权限、当前输出不是它绑定的那个、或者音箱无法访问。 支持页面把这份清单逐条写了出来,每条旁边都附有解决办法。
接下来
还在有线和无线之间犹豫? 光纤与 AirPlay 之争把这笔取舍讲透了,包括 AirPlay 并非人们以为的低音质选项这一点。 已经有音箱了? Sonos Ray 与 Mac 设置指南讲的是接线,首页讲的是应用本身。
不确定这是否适用于你的配置? 告诉我们你桌上是什么设备——你会得到一个诚实的答案,哪怕答案是你什么都不需要。