VoiceFox
Rust + ratatui + libmpv 构建的终端音乐播放器。当前开发线已经从单纯的「终端播放」扩展成完整的本地音乐工作台,同时保持键盘优先、鼠标可用和低开销。
当前版本
当前版本线为 0.5.0。
这一轮更新补齐了几个原本比较像桌面播放器才会有的能力:实时频谱可视化、睡眠定时器、Windows SMTC / 硬件媒体键、歌单导入导出与网易云推送、网易云远程歌单只读缓存。
当前能力
播放与音频
- libmpv 播放、ReplayGain、EQ、A-B 循环、淡入淡出
- 多音源聚合搜索与失败换源
- LRC / KRC / QRC / YRC 歌词、翻译与罗马音
- 本地音乐扫描、标签、封面、歌词、CUE 分轨和文件诊断
- w 开关 cava 风格频谱,PipeWire 优先采集系统输出监视流
- t 睡眠定时器,到点淡出后暂停
- 封面主色跟随界面强调色
歌单与数据
- 收藏、历史、自建歌单、排行榜、热门歌单
- M3U / M3U8、LX Music JSON、网易云歌单 JSON 导入
- 自建歌单 M3U8 导出
- 自建歌单 / 收藏只追加推送到网易云
- 网易云歌单作为远程集合只读镜像缓存,按 ID 增量合并
- 缓存跨进程落盘,避免重启后远程歌单丢失
- 跨音源同步层支持 Diff、匹配、未匹配提示和持久化映射
下载
- 并发分片下载
- CDN 回退与重试
- 大小 / MD5 完整性校验
- 标签、封面、标准 LRC 写入
- 下载取消、失败清理与任务管理
终端交互
- 键盘优先,同时支持鼠标点击、右键菜单和拖拽
- 队列、排行榜、歌单、收藏、历史、本地音乐等页面支持列设置
- 表头列宽、面板分隔线和状态栏高度可拖拽调整
- 拖拽布局会持久化
- 图片终端预览支持 Kitty / Sixel / iTerm2,并有字符降级
- Linux MPRIS
- Windows SMTC:硬件媒体键、系统媒体浮层、蓝牙耳机控制与封面/歌曲信息
0.5.0 的几个关键变化
频谱不是简单把音频数据画成柱子:Linux 下优先使用 PipeWire monitor 流采集系统实际输出,再经过 4096 点 FFT、对数频带分析、动态平滑和峰值衰减后渲染。采集进程退出或 PipeWire 重启时会自动重连;超过 1 秒没有新帧时不继续绘制旧数据。
网易云歌单则改成远程集合缓存。它不会把网易云歌单复制成本地歌单,而是保存远端歌单及歌曲元数据;播放仍由网易云音源负责解析地址。远端请求部分失败时按歌单 ID 增量合并,避免一次频控把已有缓存清空。
歌单互通也从单纯导入扩展到了完整工作流:本地歌单可以导出 M3U8,外部 M3U/M3U8、LX Music JSON 和网易云 JSON 可以导入;登录网易云后还可以把本地歌单或收藏只追加到远端,生成 Diff 后确认执行,不做远端删除。
架构方向
当前工程已经拆分出播放器、音源、歌词、同步、下载、运行时和 TUI 页面等多个层次:
ratatui UI
↓
application / services
↓
core ───── player / lyric / runtime
↓
source providers
├─ 酷我 / 酷狗 / QQ / 网易云 / 咪咕
├─ Bilibili / 千千 / JOOX / 5sing
├─ Jamendo / Apple Music / 汽水
└─ 本地 / JS 自定义音源
sync
├─ matcher
├─ Diff / SyncPlan
└─ SyncProvider
media
├─ Linux MPRIS
└─ Windows SMTC
同步核心与具体音源解耦,新增平台原则上只需要实现对应的 SyncProvider。
工程状态
VoiceFox 现在同时保留稳定的旧版 Rust / ratatui TUI 开发线,并维护新的 Flutter / Rust 架构实验线。当前 Linux TUI 仍然是主要可用形态。
VoiceFox 文档与入口
评论





