AllMusic Lyrics

AllMusic Lyrics

color_yr 制作的 AllMusic Client3 附加模组。自动从网易云音乐 / LRCLIB 获取同步歌词,并在歌曲播放时显示在屏幕上。

工具

AllMusic Client3 的模组附加组件,作者:color_yr (https://github.com/Coloryr/AllMusic)。
自动从网易云音乐 / LRCLIB 获取同步歌词,并在播放歌曲时显示在屏幕上。

当前歌词获取具有以下日志链路:

常规路径(有歌曲 ID)

[AllMusic3]正在解析歌曲[123456]     ← 被 ClientReceiveMessageEvents.GAME 捕获

  ↓ LyricsDisplay.onSongParsing()
  ↓ LyricsFetcher.fetchById(123456)  → 直接获取 LRC 歌词
  ↓ 日志:"后台获取歌词 ID=123456"
  ↓ 日志:"歌词已缓存: 35 行 (等待播放)"
[AllMusic3]正在播放:歌名 | 歌手     ← 被 ClientReceiveMessageEvents.GAME 捕获

  ↓ LyricsDisplay.onNowPlaying()
  ↓ pendingLines 有缓存 → 直接使用
  ↓ 日志:"正在播放: 歌名 | 歌手"
  ↓ 日志:"歌词显示已激活: 歌名 | 歌手"

备用路径(无缓存,按歌名搜索)

如果"正在解析歌曲"消息从未出现,而是直接收到"正在播放":

[AllMusic3]正在播放:歌名 | 歌手

  ↓ LyricsDisplay.onNowPlaying()
  ↓ pendingLines == null → 回退至搜索
  ↓ 日志:"无缓存,用歌名搜索..."
  ↓ LyricsFetcher.fetch(message)
    ├─ 匹配 NOW_PLAYING 正则 → 提取 "歌名 | 歌手"
    ├─ 拆分:name="歌名", artist="歌手"
    ├─ neteaseSearch("歌名", "歌手")  → 搜索 API
    ├─ neteaseSearch("歌名", "")       → 仅歌名(备用)
    └─ lrclib("歌名", "歌手")          → LRCLIB(最终备用)

第三条路径(packDo 备用)

AllMusicCore.packDo(INFO, "歌名 | 歌手")   ← Mixin TAIL 拦截

  ↓ LyricsDisplay.onNowPlaying(data)
  ↓ 同上搜索流程

关键正则表达式(LyricsFetcher)

正则表达式 匹配内容 动作
正在解析歌曲[::]?\s*(\d+) 正在解析歌曲[123456] 直接通过 ID 获取
music\.163\.com.*[/#]song\?id=(\d+) 网易云 URL 直接通过 ID 获取
正在播放[::]\s*(.+?)(?:\s+by:.*)?$ 正在播放:歌曲名称 按名称搜索
搜索日志关键词: 搜索歌词:, 网易云搜索, LRCLIB, ✘ 未找到歌词.

目前,此模块不会生成英文日志文件。