3 个版本

0.1.4 2023年5月17日
0.1.3 2023年5月13日
0.1.1 2020年5月8日

#997数据库接口

每月41次下载

GPL-3.0-or-later

105KB
2K SLoC

目录

  1. 简介
  2. 许可证
  3. 先决条件
  4. 安装
  5. 用法
    1. 导出您的音乐库数据库
    2. 导出您的音乐库数据库
  6. 讨论
    1. 背景
      1. “Winamp”是什么东西?
      2. 我为什么要写这个?
      3. 我为什么要逆向工程格式?
    2. 其他选项
  7. 状态 & 路线图

简介

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-表达式(分别使用 serdejsonserde-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