Repository navigation
Releases
Releases · YouRanCoder/LimbusLyricSimulator
v3.1.0
新增:暂停时隐藏歌词
播放页新增开关 「暂停时隐藏歌词」(默认关闭,保持原有行为)。
- 开启:播放器暂停时清空歌词层(而不是定格在屏幕上),恢复播放后从暂停位置继续演出,不丢进度;
- 关闭:与之前一致,暂停只定格画面。
实现细节
隐藏不是「隐藏窗口」,而是只清空画面:
- 时间轴、当前句、暂停时刻全部保留,所以恢复播放时能精确续演;
paintEvent在隐藏期间以CompositionMode_Source整屏刷成全透明,上一帧不会残留;- 隐藏时先把暂停时刻定格,再停掉逐字/颤动定时器——否则恢复时无从补偿暂停时长,时间轴会瞬间前跳;
- 隐藏期间取到回拖进度(seek/单曲循环)时不会重启行推进定时器,恢复播放时才统一重启,歌词不会在不可见时继续跑;
- 「停止播放」「重新获取歌词」都会清掉隐藏态,下一次演出正常显示;
- 开关切换即时生效并写入配置,关闭时若正处于隐藏态会立刻恢复显示。
顺带
网易云的「加入下一首播放」误切歌问题已随依赖 netease-cloudmusic-detector 2.0.7 修复(见 v3.0.2)。
v3.0.2
修复:网易云「加入下一首播放」导致歌词停止显示(#11)
根因在底层依赖库,已随 netease-cloudmusic-detector 2.0.7 修复,本版同步升级。
发生了什么
网易云在「加入下一首播放」、把歌曲插入播放队列时,会写一条 checkPlayPrivilege(播放权限预检)日志。旧版检测库把它当成真实切歌,于是:
- 歌词软件提前拉取下一首的歌词,当前歌词被停掉;
- 真正切到该曲时,因为曲目 ID 已相同而被去重,不再推送切歌事件,歌词从此不再出现,只能手动点「开始播放」恢复。
修复方式(库 2.0.7)
改为「候选 + 出声确认」:权限预检只登记候选,不改状态、不发回调;只有 NATIVE_SONG_LOAD(同 songId)或 native播放state 的 playId 前缀确认后才正式切歌,歌词同时锚定在真实出声点。
启动回溯(_preload)也同步修正:过滤掉从未出声的预检锚点;webdb 查不到当前歌时继续向更早日志取同一首的预检记录补齐歌名歌手(此前会直接回溯失败,启动后没有歌曲信息)。
本仓库的两处适配加固
core/app_controller.py:歌词获取的互斥守卫从「布尔丢弃」改为asyncio.Lock排队。原来若上一首的获取没结束,切歌触发的重新获取会被直接丢弃并返回失败,界面随即停止歌词——新歌歌词再也不显示。现在排队执行时,后一个请求会重新读取当前播放信息,拿到的总是最新歌曲的歌词。ui/control_panel.py:_fetch_and_restart在获取前后比对歌曲,若获取期间又切了歌则放弃本次表演,避免旧歌词短暂抢着播出来。
关于「已是最新版本仍然提示有更新」
v3.0.1 的 Release 里混入了一个用旧版本号(3.0.0)构建的包,导致 3.0.1 用户被提示有新版本。那个错误资产已删除,本版重新构建,版本号也已正确写入。
依赖:netease-cloudmusic-detector >= 2.0.7
v3.0.1
v3.0.0
v2.0.5
v2.0.1
v2.0.0
refactor: 使用 PyQt-Fluent-Widgets 重构控制面板,重构歌词获取流程