#464·Mineradio

[Bug] Cuefield AutoMix 交接后第三首起播放器卡死,切歌无法恢复(v2.2.0)

Author: HeliHlKtCreated Sep 11, 2026Updated Sep 11, 2026

环境

  • Mineradio 2.2.0
  • Windows
  • 音源:QQ 音乐
  • Cuefield AutoMix:开启

问题表现

启动后可以正常导入 QQ 音乐歌单,前两首能够正常播放和切换。 发生一次 Cuefield AutoMix 交接后,后续歌曲可能卡在 0:00 且完全无声。 切换歌曲或歌单无法恢复,重启应用后暂时正常。 关闭 Cuefield AutoMix 并重启后,问题不再出现。

排查结果

QQ 音乐连接层正常:

  • 登录态和 playback key 有效
  • 连续三次 /api/qq/song/url 请求均成功
  • 第三首仍能取得有效无损 FLAC 地址
  • /api/audio 代理读取第三首成功返回 HTTP 206 和有效音频数据

因此问题应位于前端 Web Audio / Cuefield 状态管理。

疑似原因

涉及文件:

  • public/js/modules/05-playback/08-audio-graph-controls.js
  • public/js/modules/05-playback/18-cuefield-automix-integration.js

Cuefield 交接后,音频元素保留 __mineradioPreparedAudioGraph, 并被标记为 adopted

下一次普通切歌调用 resetPlaybackAudioGraphForSourceSwitch() 时:

  1. disconnectAudioGraphNodes() 断开当前 source/analyser/gain 节点
  2. 随后又从 __mineradioPreparedAudioGraph 取回同一批已断开的节点
  3. audioReady 设置为 true
  4. audioGraphHealthy() 只检查对象引用是否存在,没有验证连接是否仍有效
  5. ensurePlaybackAudioGraph() 因而不会重新构建音频图

最终表现为播放地址和 UI 状态正常,但音频输出链已经断开。

修复建议

普通切歌时不要重新采用已断开的 prepared graph。可以考虑:

  • Cuefield handoff 完成并转移所有权后清理 prepared graph 标记;或
  • 仅在真正切换到新的预加载 Audio 元素时执行 prepared graph adoption;或
  • disconnect 后将 audioReady 保持为 false,让 initAudio() 使用保留的 MediaElementSource 重新连接节点。