# TIL : xiaomusic 导致小米音箱 App 显示"另一首歌"却无声

这是 xiaomusic 推送链路与音箱内部状态层的问题，和语音链路的 [[xiaomi-speaker-llm-open-xiaoai|小爱音箱接入自托管 LLM]] 是两套彼此独立的系统。

## 现象
音箱实际播放的是来自 `xiaomusic` 推送的歌曲 A（声音正常）。
小米音箱 App 界面却显示正在播放另一首歌曲 B，且音箱并未发出 B 的声音。

## 核心原理（两层状态分离）
小米音箱内部存在两个相互独立的状态层：

### 物理音频输出层（硬件层）
驱动扬声器发声，同一时间只能被一个音源独占。`xiaomusic` 通过 API 直接推流歌曲 A 时，该通道被 A 完全占用。

### 云端播放状态层（软件层）
由小米云端维护，负责记录播放进度、歌单等信息供 App 展示。`xiaomusic` 作为第三方工具，只能控制硬件播放，**没有权限修改小米云端的状态**。

## 为什么 App 显示 B 却没有声音？
1. 在播放 `xiaomusic` 前，云端残留了歌曲 B 的记录（或之前的播放列表）。
2. `xiaomusic` 接管物理层后，云端仍在"自嗨"地更新 B 的进度（App 随之显示）。
3. 云端尝试将 B 的音频流推送到音箱时，发现物理层被 A 占用，B 的音频流被硬件丢弃/静音。
4. 结果：App 显示 B 在播放，但耳朵只听到 A。

## 关键结论
这不是 Bug，而是 `xiaomusic` 因小米未开放云端状态修改权限而产生的*设计局限性*。App 显示是"假"的，音箱发声才是"真"的。

## 应急处理（可选）
- 在 App 上点击"暂停/下一首"（操作会失败），但该指令会触发云端刷新状态，App 界面通常会变为"暂停中"或"未播放"。
- 使用 `xiaomusic` 前，先在官方 App 中清空播放列表或让官方播放暂停，避免云端残留"待播"记录。
- 直接无视（对实际听歌无任何影响）。
