最近因为远程办公变多, 经常得从手机上接团队会议. 这个时候开始意识到 iOS 的音频管理系统并不是很理想. 简单的说问题有以下几点:
- 媒体模式下, 音量仅仅面向特定设备, 在这个基础上会覆盖对应状态铃声的音量. 最低音量即为静音. 而震动则是独立配置, 与音量配置无关.
- 通话模式下, 发现并不能将音量降低到 0. 并且所有蓝牙耳机都会进入通话编码模式, 此模式下码率会显著下降. AirPods 2 等 AAC/Bluetooth 5.0 耳机在延迟和通话质量上会比 SBC 和较老蓝牙版本的耳机显著好一些.
- 闹钟音量和铃声绑定(但是不适用静音锁定), 同事闹钟音量和通话一样, 都不能降低到 0
- AirPlay 模式下, 音量为目标播放设备的输出音量. 这个地方没有太多问题. 但是对于 HomePod, 很多人抱怨这玩意在 macOS 播放视频会有明显的画音不同步. 这个原因就是 AirPlay 2 框架和系统音频框架之间区别造成的. 所以通常在 macOS 会使用 IINA 这样可以强制加入 offset 的应用, 或是用 Apple TV 这样支持 AirPlay 2 延迟侦测的设备来播放视频.
- Google Cast 借助了系统级重载音量功能键+自己绘制音量的方式兼容了 iOS 平台.
- 对于外部设备, 比如 3.5mm 耳机孔/lightning EarPod, 除了少数 Lightning MFi 麦克风产品, 个人目前外接 Rode RecordMicro, 默认音频输出会被绑定到那个没有播放能力的转接线上. 而若是通过 USB 转 Lightning 适配器接入 Blue Yeti 麦克风, 则同样会把输出绑定到 Blue 上...
而简单对比 Android 的音频管理, 就会发现 iOS 目前的设计非常蛋疼:
非常直观的调节音量, 告诉你了:
- 当前播放是 Google Cast 设备, 音量键调节的正是此设备
- 媒体音量暂时不可用, 但是可以调节
- Ring Tone 处于静音震动模式, 所以这个状态等于 iOS 上静音键的作用
而选择高级音量设置:
- 所有音量独立可调节
- 通话/铃声/闹钟音量相互独立可调节
但是 Android 在外部设备这方面也有同样的毛病(甚至更严重), 比如接入 Blue Yeti, 就会当作类似外接耳机这样的设备, 直接抢占内置扬声器和麦克风(iOS 仍然只是一个选项), 同时不可以进行组合选择(比如 USB 麦克风+蓝牙耳机). 这恐怕是移动平台长期以来和桌面系统的差距之一. 也许 iOS 会利用类似 Garage Band/Logic Pro X 上的 Core Audio 框架绕过系统管理, 从而达到更低延迟, 更细致的多设备管理.