3 个版本
0.1.4 | 2023年5月17日 |
---|---|
0.1.3 | 2023年5月13日 |
0.1.1 | 2020年5月8日 |
#997 在 数据库接口
每月41次下载
105KB
2K SLoC
目录
简介
xnde 是一个小的 Rust 程序,可以从您的 Winamp 音乐库数据库中提取内容。术语“NDE”指的是 Nullsoft 数据库引擎,因此“xnde”可以代表“eX-NDE”、“从 NDE 提取”或甚至“从 NDE 中解脱出来”。
xnde 并没有在 Rust 中完全重新实现 NDE;它只会从您的媒体库数据库中读取主表,并将数据转储到(希望更有用)的格式中。
许可证
xnde 是 GPL v3 软件。
先决条件
Rust 工具链(目前 Rust 版本为 1.69)
安装
xnde 可在 crates.io 上找到,但您也可以通过常规的 Autotools 咒语安装它
cd /tmp
curl -O https://www.unwoundstack.com/dist/xnde-0.1.4.tar.xz
tar xf xnde-0.1.4.tar.xz
cd xnde-0.1.4
./configure
make
make check
sudo make install
当然,您也可以从源代码构建
git clone https://github.com/sp1ff/xnde.git
cd xnde
./bootstrap
./configure && make all check
sudo make isntall
用法
该工具提供两个子命令:dump
& export
。
导出您的音乐库数据库
这会将数据库非常粗糙地转储到 stdout
。坦白说,它的主要用途是调试和故障排除工具。
$>: xnde dump main.idx main.dat
There are 2 indicies.
Each index has 6107 records.
Column: ID 0, size: 11, prev: 0x0000, next: 0x0021, FILENAME, filename
Column: ID 1, size: 8, prev: 0x0008, next: 0x0037, STRING, title
...
ID 255, size: 13, prev: 0x0000, next: 0x03f9, pos: 4294967295, type: -1, name: None
ID 0, size: 17, prev: 0x03de, next: 0x0000, pos: 0, type: 12, name: filename
ID 0, size: 112, prev: 0x0000, next: 0x0496 C:\space\grabpcasts\@Context\atcontext_0906_102709.mp3 "C:\\space\\grabpcasts\\@Context\\atcontext_0906_102709.mp3"
ID 1, size: 56, prev: 0x0418, next: 0x04dc Episode 14: Augusto Pinaud
ID 2, size: 62, prev: 0x0496, next: 0x0528 http://atcontext.blogspot.com
...
导出您的音乐库数据库
这是更有用的子命令:它将读取您的数据库,为每条记录实例化一个 Track
,然后将结果集合序列化到 JSON 或 LISP 风格的 S-表达式(分别使用 serdejson 或 serde-lexpr)
$>: xnde export -f sexp -o out.el main.idx main.dat
Creating 6526 Tracks...
Creating 6526 Tracks...done.
Writing out.el...
Writing out.el...done.
讨论
这应该属于一个适当的 Texinfo 手册,但我还没有设置好。在此期间,我已经将我所学到的知识记录在这里 这里。
背景
“Winamp”是什么东西?
另请参阅此处。
1997年4月,Justin Frankel和Dmitry Boldyrev发布了Winamp,这是一个小型、性能良好的Windows MP3播放器。Frankel于1998年1月成立了Nullsoft公司。在1.5版本中,Winamp从免费软件转变为共享软件,并收取10美元的注册费;这并没有阻碍其普及,反而从付费用户那里每月带来了10万美元的收入。1998年9月发布的Winamp 2.0成为了有史以来下载量最大的Windows程序之一。
Winamp深受用户喜爱的一个原因是其插件架构。Nullsoft在标准发行版中提供了几个插件,其中包括音乐库。使用它,可以管理、组织、搜索和播放数千个MP3文件的个人库。
Nullsoft在1999年被AOL收购。到2000年,Winamp已被注册了2500万次,但Nullsoft开始面临AOL大量收购带来的问题。2002年推出了备受争议的Winamp 3,这是一个完全重写的版本,与之前的紧凑、轻量级代码理念背道而驰。由于Winamp 3性能不佳和资源需求高,许多用户(包括作者)纷纷回归Winamp 2,这导致Nullsoft继续开发2.x版本,并在2003年底最终发布了Winamp 5(2+3)。从5.2版本开始,Winamp提供了与iPod同步用户库的功能,这使得许多iPod用户(包括作者)选择使用Winamp而不是iTunes来管理他们的设备。
原Winamp团队于2004年离开AOL,开发工作转移到弗吉尼亚州的杜勒斯。工作继续进行,尽管速度较慢。2013年底发布了Winamp 5.66后,AOL宣布将在当年晚些时候关闭winamp.com,并且该软件将不再提供下载。后来宣布Nullsoft(包括Shoutcast,一个MP3流媒体平台)已被卖给比利时公司Radionomy。截至本文写作时,winamp.com仍在运行,并从Radionomy提供Winamp 5.8(beta)的下载。
我为什么要写这个?
值得称赞的是,Winamp在21世纪早期依然可用,用于管理大量的'.mp3'文件库。Winamp并没有完全消失,但它被困在一个我早已放弃的操作系统上(我怀疑许多其他技术型音乐爱好者也是如此)。我希望将我在音乐库数据库中积累的信息(播放次数、评分等)从其专有格式中提取出来,放入新的应用程序中(例如mpd)。
我为什么要逆向工程格式?
我找到了Winamp SDK的一个副本,其中包含了C++ NDE实现。它在Linux上无法编译,所以我深入研究了代码,看是否可以将其移植。在仔细查看代码后,我决定,由于我只需要一个阅读器(而不是完全的功能实现),并且磁盘上的格式相当干净,最快的方法就是直接逆向工程文件格式。
我得到了一些帮助:这个是一个很好的起点,尽管我认为它指的是格式的一个早期版本(在这个参考中,每个索引条目只有四个字节)。这个旧Winamp论坛上的帖子非常有用,其中包括一个C++ NDE客户端。
其他选项
状态 & 路线图
我大约三年前使用这个项目将我的音乐数据库从Winamp导出到MPD,并结合mpdpopm。从那时起,这个项目就被放在一边了。我定期更新它以响应dependabot警报等。如果有人觉得它有用,欢迎在[email protected]和issues中提供错误报告、评论、问题、PR和功能请求等。
依赖项
~8–12MB
~220K SLoC