撑得住的媒体库
并行扫描器读的是完整标签、真实时长和每个文件自己的编码,不是扫一眼文件头。文件夹监视扛得住重命名,也不会有东西悄悄消失。
给拥有大型、精心整理过标签的本地媒体库的人用的桌面播放器。面板自己拼,一套主题就是一个文件,可以直接递给别人。在 Linux、macOS 和 Windows 上都是原生的。
rox 就是一个可执行文件,鼠标还没松开它就起来了。
| 播放器 | 出窗口 | 完全加载 | 内存 | 空闲 CPU |
|---|---|---|---|---|
| rox | 0.3 s | 2.3 s | 134 MB | 0.5% |
| Elisa | 0.7 s | 一直静不下来 | 206 MB | 74% |
| fooyin | 0.3 s | 18 s | 364 MB | 0% |
| Quod Libet | - | 19 s | 384 MB | 0.2% |
| Strawberry | 0.3 s | 32 s | 434 MB | 0.8% |
| Museeks | - | 3 s | 436 MB | 0% |
| Tauon | 8.7 s | 12 s | 2.8 GB | 0% |
这些数字都是我自己在同一台机器上测的(Ryzen 9 5950X,Linux/Wayland),同一个放在外置 SSD 上的五万首曲目媒体库,每个播放器都过同一套测试流程,并且都已经把媒体库加载好。内存是整棵进程树的 PSS。“完全加载”指启动后 CPU 平静下来的那一刻;空闲指窗口可见、播放器暂停的状态。 DeaDBeeF 本来会停在 44 MB 拿下内存这一项,但它没能占到一行:它的 MP3 解析器每次导入这个媒体库都会在半路段错误。rox 把全部五万首都索引下来了,包括那些绊倒它的截断文件。
并行扫描器读的是完整标签、真实时长和每个文件自己的编码,不是扫一眼文件头。文件夹监视扛得住重命名,也不会有东西悄悄消失。
完整的编辑器,原子写入、批量修改加查找和替换。评分通过 FMPS 和 POPM 写在文件本身里。可以从 MusicBrainz、iTunes 和 Deezer 查询。
整张碟的 FLAC 配上它的 cue 表,索引成真正的行。每一段都能拖动进度、scrobble、排序,也能无缝接进下一段,跟普通文件一样。
一条流,带随机、重复、下一首播放和 A-B 循环。书签一个键就能放下,落在进度条上。媒体键和“正在播放”在三个平台上都能用。
独立窗口里的均衡器、不去碰专辑自身接缝的交叉淡化,还有会说明硬件到底答应了什么的独占输出。
rox 从音频本身描述你的曲目,速度也算在内,再按相像程度安排接下来放什么。它在你自己的机器上跑你自己的文件,中间没有任何服务。
四十来种面板,从媒体库、队列到艺术家墙、频谱和 VU。可以连配置一起复制、存成预设,或者弹出成独立窗口。
一套工作区就是一个文件,装着布局、调色板、外观和着色器。调色板可以从正在播放的封面取色,跟着封面走浅色或深色。
给某个面板或者整个窗口写一个 WGSL 着色器,或者用 projectM 跑 Milkdrop 预设。从频谱上取出来的具名信号会喂进着色器的输入。
同步的或纯文本的,来自同名文件、标签或 lrclib,编辑器会写回它读来的地方。收听日志驱动播放历史面板、统计和 scrobble。
收藏、拖动重排、M3U、PLS 和 XSPF 进出,还有重新跑一次保存好的查询、而不是拿着快照的智能播放列表。文件走了又回来,条目照样还在。
一个 tar 包、一个 DMG 或者一个 zip,另外还有 AUR 和 Nix flake。便携模式把媒体库和设置放在可执行文件旁边的文件夹里。
本地套接字上的 JSON-RPC:播放控制、队列编辑、媒体库搜索和主动推送的事件。鉴权就是文件权限,没有任何东西在端口上监听。
应用旁边的一个代理把套接字接上 MCP,AI 客户端就能问正在放什么,也能控制播放。默认关闭,每次调用都重新查一遍。
一个源客户端把 rox 正在播的内容编码成 MP3 推到你指定的挂载点。只往外连:对外的网络那一面归 Icecast,服务器挂了也不会卡住本地播放。
盒子里带了 八 套工作区,在欢迎窗口上点一下就能用。每一套都是一个文件,装着自己的布局、调色板和着色器,随你改、随你玩坏,再递给别人。全部看一遍。