1. 事情是怎么开始的
我用 Mac 的时候,常年都会接一块显示器,有时候还会接入蓝牙音箱。平时系统只能选择一个默认输出,我就在想:既然面前有两三个能发出声音的设备,为什么不能让它们同时发声?
我上网找了攻略,发现可以用系统内建的“音频 MIDI 设置”创建多输出设备。声音虽然能同时出来,但操作很繁琐:没有一个好用的总音量控制,也不方便分别调整 AirPods 、显示器和其他音箱。更麻烦的是不同设备会有延迟,声音不同步的时候,听起来就像在 KTV 里一群人在抢麦。
2. 为什么还是决定自己做
我没有一开始就直接做,因为很怕自己变成那种做出十分钟 Demo 就宣布解决问题的自嗨开发者。自己遇到的问题,可能已经有人解决过,也可能市面上早已有成熟产品;如果不先研究,只是在浪费 token 、重复造轮子。
我最早看到了 GitHub 上的 FineTune ,但是它设计的理念是针对单个 APP 音量调节,对于多设备输出,也是从 APP 进入,不太符合我的习惯。还有就是类似的 APP ,他们都没有针对多设备同步时候,无线或者蓝牙音箱延迟进行调整的功能。我有个蓝牙音箱,总是比 Mac 的自带音箱慢一点。 还有收费的 SoundSource 等等,他们的虚拟声卡功能更专业,不过也没有针对同步功能进行优化。 所以才开始做 Tutti 。
3. Tutti 现在能解决什么
Tutti 是一个常驻 Mac 菜单栏的音频控制工具。最基础的功能,是在面板里勾选多个本地输出设备,让 MacBook 扬声器、AirPods 、蓝牙音频设备、USB 音频设备或者 HDMI 显示器同时播放,并分别控制音量。
它也可以按 App 调整音量和分配输出。例如,可以让某个 App 从显示器播放,另一个 App 从 MacBook 扬声器播放。或者和你朋友一人一副 AirPods 看电影,苹果在 iPhone 上实现了这个 AirPods 同播的功能,我不知道为什么在 Mac 上却没有?
我还做了左右声道拆分,可以把左、右声道分别交给两个输出设备,就可以实现戴耳机才能实现的立体声效果,来听一些左右声道的歌非常爽;

你也可以单独调整某台设备的延迟。通过延迟补偿,可以尽量把不同设备听到的声音对齐。

上面所有的设备都保存成预设一键切换,我甚至做了 iOS 的 APP ,可以当做遥控器控制 Mac 上的 Tutti 。
4. 我在实现上的取舍
Tutti 是原生 macOS 应用,为了不做的那么“重”,它只用 CoreAudio 来实现,不需要安装虚拟音频驱动或系统扩展。退出后会恢复系统原来的音频输出。应用本体支持 macOS 13 及以上;按 App 控制音量、EQ 和输出需要 macOS 14.4 及以上。
这是我第一次真正把一个 App 从想法、代码、测试,一直做到官网、支付和售后。整个流程走完后,我最大的感受是:Vibe coding 做出一个能运行的玩具并不难,但要把它做成一个稳定、有人愿意使用的产品,需要花更多时间处理兼容性、反馈和各种边缘问题。
第一版虽然很快就做出来了,但我不知道功能优先级应该怎么排,也不知道是否真的有人需要。后来找了一些用户测试,根据他们使用的设备、实际需求和遇到的问题,持续迭代了一个多月,才决定正式拿出来分享。
5. 已知限制和商业化思考
目前已知的主要限制:
- AirPlay 设备不能加入 Tutti 的多输出组合;
- 部分 App 或新的 macOS 测试版可能存在 Core Audio 兼容问题;
- 应用音量和应用输出功能需要 macOS 14.4 及以上。
这个产品在我想开始做的时候,我就决定它一定是一个大部分功能免费,但是呢,专业功能或者说某些痛点功能是进行收费的。因为我不想把它当做一个 demo 或者说一个玩具来去做,我希望它是一个成熟的产品,那它就是要面向市场去获得一些商业化上的正反馈。所以 Tutti 的基础功能可以免费使用,Pro 提供 7 天试用,之后是一次买断。
6. 想听听大家的真实使用方式
我现在最想了解的是:
- 大家平时会给一台 Mac 同时连接哪些音频设备?
- 在多设备输出、应用音量和应用输出分配之间,大家最常遇到的问题是什么?