跳转到主要内容

Chromaprint声音指纹识别和Acoustid API的绑定

项目描述

Chromaprint及其相关的Acoustid网络服务组成一个高质量、开源的声音指纹识别系统。本包提供了对指纹算法库的Python绑定,该库是用C语言编写的但具有可移植性,以及提供指纹查找的网络服务。

安装

此库与Python 2(2.7+,可能也包括2.6)和Python 3(3.3+)兼容。

首先,通过Lukas Lalinsky安装Chromaprint指纹库。 (该库本身依赖于一个FFT库,但它足够智能,可以使用您可能已经安装的软件中的算法;请参阅Chromaprint页面以获取详细信息。) 此模块可以使用Chromaprint动态库或fpcalc命令行工具,后者本身依赖于libavcodec。 如果您使用fpcalc,请确保它已添加到您的$PATH,或者将FPCALC环境变量设置为它的位置。

然后您可以使用pip从PyPI安装此库

$ pip install pyacoustid

此库使用audioread在未使用fpcalc时进行音频解码,并使用requests与HTTP API通信(pip应自动安装这些依赖项)。

运行

您可以通过运行包含的示例脚本aidmatch.py来测试您的安装

$ python aidmatch.py mysterious_music.mp3

这将显示来自Acoustid数据库的最高级元数据匹配。该脚本使用audioread解码音乐,因此它应透明地使用系统上可用的媒体库(GStreamer、FFmpeg、MAD或Core Audio)。

在您的代码中使用

使用pyacoustid识别音频文件的最简单方法是调用match函数

>>> import acoustid
>>> for score, recording_id, title, artist in acoustid.match(apikey, path):
>>>     ...

此便利函数使用audioread解码音频并为您解析响应,提取最关键的曲目元数据。它返回一个包含相关信息的元组可迭代对象。所有操作都在一次操作中完成。还有许多“较小”的函数可用于执行过程的某些部分

  • fingerprint(samplerate, channels, pcmiter):为原始音频数据生成指纹。指定音频参数并提供包含PCM数据块的迭代对象。

  • fingerprint_file(path):使用Chromaprint动态库或fpcalc命令行工具对音频文件进行指纹识别。(您可以使用force_fpcalc仅使用后者。)返回一个包含文件持续时间和其指纹的元组。

  • lookup(apikey, fingerprint, duration):向Acoustid API发送请求,查找由前一个函数返回的指纹。需要API密钥,以及源音频的长度(以秒为单位)。返回解析的JSON响应。

  • parse_lookup_result(data):给定解析的JSON响应,返回一个包含匹配分数(介于0和1之间的浮点数)、MusicBrainz录制ID、标题和艺术家名称的每个匹配的元组迭代器。

  • compare_fingerprints(a, b):比较由fingerprint_file产生的两个指纹,返回相似度分数。

当调用Web API时,模块内部执行线程安全的API速率限制,每秒最多3个查询,符合Web服务文档

如果您正在运行自己的Acoustid数据库服务器,可以使用set_base_url函数设置所有API调用的基本URL。

对库的调用可以引发两种子类的AcoustidError异常:FingerprintGenerationErrorWebServiceError。如果您想在音频无法解码或服务器上找不到匹配项时继续操作,请捕获这些异常。NoBackendErrorFingerprintGenerationError的子类,用于在找不到Chromaprint库或fpcalc命令行工具时。

版本历史

1.3.0

多位艺术家通过网页上显示的连接短语连接在一起。一个新的(纯Python)函数用于比较两个Chromaprint指纹的相似性。在Windows上搜索更多共享库位置以查找Chromaprint库。

1.2.3

修复了从chromaprint_decode_fingerprint返回的数字的符号问题。

1.2.2

修复了上一个版本中的回归,该回归在调用submit时导致KeyError崩溃。

1.2.1

某些API函数的meta参数现在可以是列表(而不仅仅是单个字符串)。

1.2.0

fingerprint_filematch添加了force_fpcalc选项。避免在服务器通信后留下悬挂套接字。修复了将memoryview对象传递给指纹识别器时的崩溃。API请求现在可以选择超时。在Python 3.8上更可靠地在Windows上找到库。向低级库添加了hash_fingerprint函数。

1.1.7

包含一个LICENSE文件。

1.1.6

在提交中避免非整数持续时间的错误。一个新函数get_submission_status抽象了API端点,用于监控使用(新)submit函数的结果。

1.1.5

修复了在 submit 函数中与 Python 3 的兼容性问题。现在 submit 中的错误也能正确处理(即,它们会引发一个有信息的 WebServiceError 而不是 TypeError)。

1.1.4

修复了 fpcalc 工具版本中报告持续时间为分数的错误。

1.1.3

除了其他字节类型外,还接受 bytearray 对象。

1.1.2

修复了在非 Unicode 区域的 Python 2 中 Unicode 文本可能导致的崩溃。寻找 Chromaprint 共享库文件的“1”版本。

1.1.1

修复了在 Python 3 上的可能安装错误(感谢 Simon Chopin)。

1.1.0

在源分布中包含 fpcalc.py 脚本。添加 Python 3 支持(感谢 Igor Tsarev)。

1.0.0

包含 fpcalc.py,这是一个模拟 Chromaprint 包中的 fpcalc 程序的脚本。处理在 Windows 上使用 Unicode 文件名和 fpcalc 后端时引发的 UnicodeDecodeError。抑制 fpcalc 的标准错误输出。

0.7

正确编码 Unicode 参数(解决了指纹提交中的 UnicodeEncodeError)。解析每个 Acoustid 查找结果的录音。

0.6

添加了一个新的函数 fingerprint_file,它自动为单个文件选择指纹后端。

0.5

修复了当录音没有艺术家或标题时的响应解析错误。修复了与 Python < 2.7 的兼容性。添加特定的 NoBackendError 异常。

0.4

指纹识别现在可以回退到使用 fpcalc 命令行工具而不是 Chromaprint 动态库,这样就可以使用二进制发行版(感谢 Lukas Lalinsky)。指纹提交(感谢 Alastair Porter)。数据块现在可以是缓冲区也可以是字节数组(修复了与 pymad 的兼容性)。

0.3

可配置的 API 基础 URL。结果解析器现在生成所有结果而不是只返回一个。在 Cygwin 上找到 chromaprint 库。新模块名称:chromaprintacoustid(无包)。

0.2

压缩 HTTP 请求和响应。限制音频解码时间为 120 秒。从便利函数返回分数。

0.1

初始版本。

致谢

此库由 Adrian Sampson 编写。Chromaprint 和 Acoustid 由 Lukas Lalinsky 编写。此软件包包含 Lukas 编写的原始基于 ctypes 的绑定。整个库在 MIT 许可证 下提供。pyacoustid 是为了与 beets 一起使用而编写的,你可能需要查看它。

项目详情


下载文件

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

源分布

pyacoustid-1.3.0.tar.gz (17.4 kB 查看哈希值

上传时间

支持