Last.fm 的声学指纹 (fplib) 的绑定
项目描述
这是 Last.fm 的声学指纹库(称为 fplib)及其相关 API 服务的 Python 接口。它执行指纹提取、指纹 ID 查找和跟踪元数据查找。
安装
要安装,您将需要一个编译器和 fplib 本身所需的依赖项:fftw(为单精度浮点数编译)和libsamplerate。(在 Debian/Ubuntu 上,软件包是libfftw3-dev和 libsamplerate0-dev。)
一旦你有了这些,你就可以使用pip从 PyPI 轻松安装:
$ pip install pylastfp
或者,如果您没有 pip(或 easy_install),请前往下载页面。正常的安装命令应该可以工作:
$ python setup.py install
要从版本控制源(即,不是从发行版 tarball)构建,您还需要Cython。(源代码发行版包括生成的 C++ 文件,避免了对 Cython 的需要。这个包的 setup.py会发挥技巧来检测您是否安装了 Cython。)
这个库还依赖于audioread来解码音频,尽管这种依赖在技术上是可选的。如果你已经有了解码音频文件的机制,就不需要安装 audioread。
跑步
您可以运行包含的指纹/查找脚本lastmatch.py 来测试您的安装:
$ lastmatch.py mysterious_music.mp3
这将显示来自 Last.fm 数据库的元数据匹配。该脚本使用 audioread来解码音乐,因此它应该透明地使用您系统上可用的媒体库(GStreamer、FFmpeg、MAD 或 Mac OS X 上的 Core Audio)。
在您的代码中使用
该脚本展示了使用 pylastfp 的常用方法,即:
>>> import lastfp >>> xml = lastfp.match_file(apikey, path) >>> matches = lastfp.parse_metadata(xml) >>> print matches[0]['artist'], '-', matches[0]['title'] The National - Fake Emprire
此示例使用match_file便利函数,该函数使用 audioread解码音频数据。该函数在调用时会导入audioread模块,因此如果您不想依赖它,请不要调用此函数。
如果你有自己的音频解码方式,可以使用底层接口:
>>> xml = lastfp.match(apikey, pcmdata, samplerate, time_in_secs)
当然,您需要一个 PCM 流来获取您想要指纹的音频。pcmdata 参数必须是 Python str或缓冲区对象的可迭代对象,其中包含 PCM 数据作为 C短 (16 位整数)值数组。
两个函数(match和match_file )都接受一个称为metadata的附加可选参数。它应该是一个包含您当前对文件元数据的猜测的字典。Last.fm 可能会使用这些信息来改进他们的数据库。dict 应该使用这些键(所有这些都是可选的): "artist"、"album"和"track"。
根据Last.fm 的 API TOS,该模块在内部执行线程安全 API,限制为每秒 5 次查询。
去做
指纹库允许优化,在每个文件的开头跳过几毫秒的解码。(请参阅 FingerprintExtractor::getToSkipMs(),如 示例客户端所示。)利用这一点会使模块的接口变得有点复杂,因为解码源需要知道要跳过的时间量。
版本历史
学分
该库由Adrian Sampson提供。它包括由Last.fm提供的 fplib 源代码。fplib 在 LGPLv3 下获得许可,因此 pylastfp 使用相同的许可。pylastfp 是为与 beets 一起使用而编写的,您可能应该检查一下。