Spotube 中文文档 下载 App

Spotube 的同步歌词——LRCLib 插件与时间轴对齐

歌词从哪来

Spotube 的歌词获取逻辑完全插件化:LyricsAPI 接口由歌词插件实现。Spotube 官方提供的 LRCLib 插件是默认选择。

[LRCLib] 是一个公开的同步歌词数据库,类似 Musixmatch,但完全开放和免费:

Spotube 的 LRCLib 插件调用它的公开 REST API(GET /api/get),根据曲目元信息搜索匹配。

Spotube 歌词匹配流程

  1. 用户播放某首歌 → Track 对象带 artist + title + duration + musicBrainzId
  2. LyricsAPI 被调用,插件传入这些参数
  3. LRCLib 返回匹配的候选列表,Spotube 按以下优先级选一条:
  1. 拿到 LRC 格式字符串 → 解析成时间戳列表 → 交给 Spotube UI 渲染

时间轴对齐

Spotube UI 里的歌词滚动是本地时间驱动的——Spotube 从 libmpv 的当前播放进度拿时间戳,和 LRC 解析出的时间戳比对,高亮当前行并滚动到中心。

这个对齐完全在本地完成,不依赖网络。所以即使你离线下载了曲目和歌词,滚动也能正常工作。

跨插件歌词匹配失败

一个常见场景:用 Spotify Metadata 插件搜到某首歌(带 Spotify track ID),但 LRCLib 里可能没有这条精确的记录。Spotube 的匹配会退到 artist + title 模糊匹配,可能返回同名但不同版本的歌词。

解决方法

  1. 换用 MusicBrainz 元数据插件搜到的曲目(带 MusicBrainz ID,LRCLib 也记录了 MBID,匹配更准)
  2. 在 Spotube 设置里开启"手动选择歌词"——当自动匹配不唯一时,Spotube 弹出候选列表让你挑
  3. 自己上传 LRC 文件(见下)

本地 LRC 文件

Spotube 支持从本地加载 LRC 文件:

歌词显示设置

Spotube 设置里可配置:

选项说明
自动滚动当前歌词行保持在屏幕中央,其余向上/向下滚动
字号歌词区独立的字号设置,随主题切换
翻译行有些 LRC 文件带翻译行([ti:translated]),Spotube 可以同时显示两行
点击歌词跳时间点某行歌词 → libmpv seek 到对应时间戳

插件架构的好处

如果 LRCLib 未来关闭或换了 API,Spotube 只需要更新 LRCLib 插件(或换一个社区歌词插件),Spotube 本体不需要改一行代码。UI 层完全不关心歌词从哪来——它只拿到 LRC 解析结果来渲染。