在终端下为 MPD 和 MPRIS 播放器提供歌词展示以及搜索功能。
- 🎵 双协议支持:同时支持 MPD 和 MPRIS 播放器协议
- 🔄 智能回退:自动检测可用播放器,MPD 优先,失败自动切换到 MPRIS
- 🚀 自动下载:播放新歌曲时自动搜索并下载最佳匹配的歌词
- ⚡ 快速响应:30 FPS 流畅刷新,即时切歌响应
- 🔍 多源搜索:支持网易云、QQ音乐、酷狗音乐等多个歌词源
- 🎯 智能匹配:根据标题、艺术家、专辑自动选择最佳歌词
- 💾 本地缓存:自动缓存已下载的歌词
- 🎨 美观界面:基于 Ratatui 的终端用户界面
- ⌨️ 快捷键控制:完整的键盘快捷键支持
cargo install lyrics-next或从源码安装:
git clone https://github.com/erasin/lyrics-next.git
cd lyrics-next
cargo install --path .~/.config/lyrics/config.toml- 配置文件~/.local/share/lyrics- 歌词缓存目录~/.cache/lyrics- 日志目录
- MPD 原生支持
- 需要运行 MPD 服务(默认端口 6600)
支持所有实现了 MPRIS D-Bus 接口的播放器,包括但不限于:
- Spotify
- VLC
- NCMpcPP
- Clementine
- Audacious
- 以及更多...
| key | action |
|---|---|
h / ? |
帮助 |
q / ESC |
退出 |
d / delete |
删除歌词 |
left |
后退 5 秒 |
right |
前进 5 秒 |
space |
暂停/播放 |
n |
下一曲 |
p |
上一曲 |
s |
搜索/手动更新 |
t |
切换标题显示 |
c |
歌词居中 |
注意:播放器需要支持 track_id 才可以控制歌曲播放进度。
| key | action |
|---|---|
q / ESC |
退出到歌词界面 |
h / ? |
帮助 |
n / Down |
下一个 |
p / Up |
上一个 |
l / Enter |
下载选中歌词 |
配置文件位于 ~/.config/lyrics/config.toml
[player-filter]
# 播放器协议选择: auto / mpd / mpris
# auto: 自动选择(优先 MPD,失败回退到 MPRIS)
protocol = "auto"
# MPD 连接配置
mpd-host = "127.0.0.1"
mpd-port = 6600
# 播放器过滤(仅对 MPRIS 有效)
# 黑名单:忽略包含这些关键词的播放器
except = ["browser", "video", "screen-cast", "chromium", "firefox"]
# 白名单:仅使用包含这些关键词的播放器(为空表示不过滤)
only = []
[ui]
# 显示设置
title = true # 显示歌曲标题
time = false # 显示时间
progress_bar = true # 显示进度条
text_center = false # 歌词居中显示
[sources]
# 歌词源设置
netease = true # 网易云音乐
qq = true # QQ音乐
kugou = true # 酷狗音乐| 值 | 说明 |
|---|---|
auto |
自动选择,优先使用 MPD,失败自动回退 MPRIS |
mpd |
仅使用 MPD 协议 |
mpris |
仅使用 MPRIS 协议 |
项目采用模块化设计:
src/
├── player/ # 播放器抽象层
│ ├── mod.rs # 统一接口和自动回退
│ ├── mpd.rs # MPD 协议实现
│ └── mpris.rs # MPRIS 协议实现
├── song.rs # 歌曲信息、播放时间、歌词解析
├── client/ # 歌词源 API 客户端
├── cache/ # 歌词缓存管理
├── ui/ # 终端用户界面
└── config.rs # 配置管理
详细架构说明请参考:
- Rust 1.70+
- MPD 服务(可选,用于测试 MPD 功能)
- 支持 MPRIS 的播放器(可选)
cargo buildcargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --all --checkcargo runA:
- 确保你的播放器正在运行
- 如果使用 MPD,检查
mpd-host和mpd-port配置是否正确 - 如果使用 MPRIS,确保播放器实现了 MPRIS D-Bus 接口
- 检查
except配置是否过滤掉了你的播放器
A: 在配置文件中设置:
[player-filter]
protocol = "mpd"A: 默认配置已经过滤了常见浏览器和视频播放器,你也可以自定义:
[player-filter]
except = ["browser", "video", "chromium", "firefox", "vlc"]A:
- 使用
s键进入搜索界面 - 选择其他来源的歌词
- 下载后自动替换
A: 自动下载功能默认启用。当播放新歌曲时,如果本地没有缓存歌词,程序会自动:
- 搜索所有启用的歌词源
- 根据标题、艺术家、专辑智能匹配
- 自动下载最佳匹配的歌词
- 缓存到本地供下次使用
整个过程通常只需 1-3 秒,完全自动化。
A: 默认 30 FPS(每秒 30 帧),提供流畅的歌词滚动和进度显示:
- 歌词同步精度:±33ms
- 切歌响应:即时
- CPU 占用:约 1%(播放时)
A: 切歌响应非常快速:
- 检测歌曲变化:即时
- 加载缓存歌词:<100ms
- 自动下载新歌词:1-3 秒
- 无需等待,立即显示
欢迎提交 Issue 和 Pull Request!
MIT License
