Last.fm的声学指纹绑定(fplib)
pylastfp的Python项目详细描述
这是一个到last.fm的声学指纹库(称为 fplib)及其相关的api服务。它执行指纹提取, 指纹ID查找和跟踪元数据查找。
安装
要安装,您需要一个编译器和fplib所需的依赖项 本身:fftw(为单精度浮点编译)和libsamplerate。 (在debian/ubuntu上,包是libfftw3-dev和 libsamplerate0-dev。
一旦有了这些,就可以使用pip:
$ pip install pylastfp
或者,如果您没有pip(或easy_install),请前往download page。 正常的安装命令应该可以工作:
$ python setup.py install
从版本控制源(即,不是从发行版)构建 你还需要Cython。(源分布包括 生成的C++文件,避免了Cython的需要。这个包裹是 setup.py会耍花招来检测您是否安装了cython。)
这个库还依赖于audioread来解码音频,尽管 依赖性在技术上是可选的。如果你已经有了解码机制 音频文件,无需安装AudioRead。
运行
您可以运行包含的fingerprinter/lookup脚本lastmatch.py, 要测试您的安装:
$ lastmatch.py mysterious_music.mp3
这将显示来自last.fm数据库的元数据匹配。脚本使用 audioread解码音乐,因此应该透明地使用媒体库 在您的系统上可用(GStreamer、FFMPEG、MAD或Mac OS X上的核心音频)。
在代码中使用
脚本展示了使用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的iterable str或buffer对象,包含作为c^{tt9}数组的pcm数据$ (16位整数)值。
两个函数(match和match_file)都接受一个附加的可选 参数名为metadata。应该是一个包含你当前猜测的口述 在文件的元数据中。last.fm可能会使用这些信息来改进 数据库。dict应该使用这些键(所有键都是可选的): "artist"、"album"和"track"。
该模块在内部执行线程安全api,每个限制为5个查询 第二,按照Last.fm’s API TOS。
待办事项
指纹库允许跳过解码的优化 在每个文件的开头几毫秒。(见 FingerprintExtractor::getToSkipMs(),如 example client)利用这一点将使模块的 因为解码源需要知道 是时候跳过了。
版本历史记录
学分
这个库由Adrian Sampson提供。它包括fplib源代码,其中 是由Last.fm。fplib是在lgplv3下授权的,因此pylastfp使用相同的 许可证pylastfp被编写为与beets一起使用,您应该 可能去看看吧。