跳转到主要内容

为Last.fm的声纹指纹库(fplib)提供绑定

项目描述

这是一个Last.fm声纹指纹库(称为fplib)及其相关API服务的Python接口。它执行指纹提取、指纹ID查找和曲目元数据查找。

安装

要安装,您需要一个编译器和fplib本身所需的依赖项:fftw(针对单精度浮点编译)和libsamplerate。(在Debian/Ubuntu上,软件包是libfftw3-devlibsamplerate0-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 strbuffer对象的可迭代序列,其中包含C short(16位整数)值的数组。

这两个函数(matchmatch_file)接受一个名为metadata的可选参数。它应该是一个包含您对文件元数据的当前猜测的字典。Last.fm可能会使用这些信息来改进他们的数据库。该字典应使用这些键(所有这些都是可选的):"artist""album""track"

该模块内部执行线程安全的API限制,每秒最多查询5次,符合Last.fm的API TOS

待办事项

指纹库允许一种优化,即跳过每个文件开头的几毫秒解码。(见FingerprintExtractor::getToSkipMs(),如示例客户端所示。)利用这一点将使模块的接口复杂化,因为解码源需要知道要跳过的时间量。

版本历史

0.6

使用audioread而不是包含的pygstpymad解码器。

0.5

处理API的空响应。setup.py现在搜索Homebrew用户本地前缀。

0.4

修复了gstdec中的清理错误,这导致文件保持打开状态。

0.3

修复了处理HTTP错误中的拼写错误。处理HTTP状态行格式错误的情况。

0.2

修复了一个严重的内存泄漏。当文件太短时安全失败。安全处理API返回的格式错误的XML。处理并公开HTTP失败。

0.1

初始发布。

致谢

此库由Adrian Sampson编写。它包括Last.fm的fplib源代码。fplib在LGPLv3下许可,因此pylastfp使用相同的许可。pylastfp是为与beets一起使用而编写的,您可能需要查看。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

pylastfp-0.6.tar.gz (47.2 kB 查看散列

上传时间:

由以下支持