Skip to content

v3.0.2

Choose a tag to compare

@github-actions github-actions released this 23 Oct 23:21
· 1 commit to main since this release

修复:网易云「加入下一首播放」导致歌词停止显示(#11)

根因在底层依赖库,已随 netease-cloudmusic-detector 2.0.7 修复,本版同步升级。

发生了什么

网易云在「加入下一首播放」、把歌曲插入播放队列时,会写一条 checkPlayPrivilege(播放权限预检)日志。旧版检测库把它当成真实切歌,于是:

  • 歌词软件提前拉取下一首的歌词,当前歌词被停掉;
  • 真正切到该曲时,因为曲目 ID 已相同而被去重,不再推送切歌事件,歌词从此不再出现,只能手动点「开始播放」恢复。

修复方式(库 2.0.7)

改为「候选 + 出声确认」:权限预检只登记候选,不改状态、不发回调;只有 NATIVE_SONG_LOAD(同 songId)或 native播放state 的 playId 前缀确认后才正式切歌,歌词同时锚定在真实出声点。

启动回溯(_preload)也同步修正:过滤掉从未出声的预检锚点;webdb 查不到当前歌时继续向更早日志取同一首的预检记录补齐歌名歌手(此前会直接回溯失败,启动后没有歌曲信息)。

本仓库的两处适配加固

  1. core/app_controller.py:歌词获取的互斥守卫从「布尔丢弃」改为 asyncio.Lock 排队。原来若上一首的获取没结束,切歌触发的重新获取会被直接丢弃并返回失败,界面随即停止歌词——新歌歌词再也不显示。现在排队执行时,后一个请求会重新读取当前播放信息,拿到的总是最新歌曲的歌词。
  2. ui/control_panel.py:_fetch_and_restart 在获取前后比对歌曲,若获取期间又切了歌则放弃本次表演,避免旧歌词短暂抢着播出来。

关于「已是最新版本仍然提示有更新」

v3.0.1 的 Release 里混入了一个用旧版本号(3.0.0)构建的包,导致 3.0.1 用户被提示有新版本。那个错误资产已删除,本版重新构建,版本号也已正确写入。

依赖:netease-cloudmusic-detector >= 2.0.7