为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
要从版本控制源(即,不是从发布tar包)构建,您还需要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或buffer对象的可迭代序列,其中包含C short(16位整数)值的数组。
这两个函数(match和match_file)接受一个名为metadata的可选参数。它应该是一个包含您对文件元数据的当前猜测的字典。Last.fm可能会使用这些信息来改进他们的数据库。该字典应使用这些键(所有这些都是可选的):"artist","album"和"track"。
该模块内部执行线程安全的API限制,每秒最多查询5次,符合Last.fm的API TOS。
待办事项
指纹库允许一种优化,即跳过每个文件开头的几毫秒解码。(见FingerprintExtractor::getToSkipMs(),如示例客户端所示。)利用这一点将使模块的接口复杂化,因为解码源需要知道要跳过的时间量。
版本历史
致谢
此库由Adrian Sampson编写。它包括Last.fm的fplib源代码。fplib在LGPLv3下许可,因此pylastfp使用相同的许可。pylastfp是为与beets一起使用而编写的,您可能需要查看。
项目详情
pylastfp-0.6.tar.gz的散列
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f9a32e532ab62e5663298b4b3b1db86f5466404f111ccaa9030c23ffee140f7 |
|
MD5 | 292946bd34f24f533029085e063d5155 |
|
BLAKE2b-256 | d15cb373ec5171cc19ed88c5c18633dd1c34043a29699f747e3704b830a96854 |