TIL : xiaomusic 导致小米音箱 App 显示"另一首歌"却无声
这是 xiaomusic 推送链路与音箱内部状态层的问题,和语音链路的 小爱音箱接入自托管 LLM 是两套彼此独立的系统。
现象
音箱实际播放的是来自 xiaomusic 推送的歌曲 A(声音正常)。
小米音箱 App 界面却显示正在播放另一首歌曲 B,且音箱并未发出 B 的声音。
核心原理(两层状态分离)
小米音箱内部存在两个相互独立的状态层:
物理音频输出层(硬件层)
驱动扬声器发声,同一时间只能被一个音源独占。xiaomusic 通过 API 直接推流歌曲 A 时,该通道被 A 完全占用。
云端播放状态层(软件层)
由小米云端维护,负责记录播放进度、歌单等信息供 App 展示。xiaomusic 作为第三方工具,只能控制硬件播放,没有权限修改小米云端的状态。
为什么 App 显示 B 却没有声音?
- 在播放
xiaomusic前,云端残留了歌曲 B 的记录(或之前的播放列表)。 xiaomusic接管物理层后,云端仍在"自嗨"地更新 B 的进度(App 随之显示)。- 云端尝试将 B 的音频流推送到音箱时,发现物理层被 A 占用,B 的音频流被硬件丢弃/静音。
- 结果:App 显示 B 在播放,但耳朵只听到 A。
关键结论
这不是 Bug,而是 xiaomusic 因小米未开放云端状态修改权限而产生的设计局限性。App 显示是"假"的,音箱发声才是"真"的。
应急处理(可选)
- 在 App 上点击"暂停/下一首"(操作会失败),但该指令会触发云端刷新状态,App 界面通常会变为"暂停中"或"未播放"。
- 使用
xiaomusic前,先在官方 App 中清空播放列表或让官方播放暂停,避免云端残留"待播"记录。 - 直接无视(对实际听歌无任何影响)。