如何使用Python从acoustID获取跟踪元数据

如何解决如何使用Python从acoustID获取跟踪元数据

我有一个带有未知标签的file.mp3。我用它来获取acoustid

import acoustid
acoustid= acoustid.match(API_KEY,filepath)

acoustid包含多个候选者,假设我选择了一个最佳候选者:“ 0f6eb38a-d6c9-4f87-a9a7-6e7b0eeb4281”。

我已经尝试过了,但是并没有提供很多信息:

import musicbrainzngs
musicbrainzngs.get_recording_by_id(acoustid)

如何从此acoustid获得相应的标签(专辑,大头钉编号,类型,乐队等)?

解决方法

您的acoustID不是声调,而是MusicBrainz Identifier (MBID)Recording

您是正确的,默认情况下musicbrainzngs.get_recording_by_id仅返回很少的数据集。它是MusicBrainz lookup API的包装,该API根据通过inc参数请求的内容返回数据。这在musicbrainzngs中可以作为includes函数的get_*_by_id参数使用。如果您使用

musicbrainzngs.get_recording_by_id("0f6eb38a-d6c9-4f87-a9a7-6e7b0eeb4281",includes=["artists","releases"])

将返回更多数据-在这种情况下,有关录音的艺术家及其出现的发行版本的信息。您需要定义自己(或要求用户)选择正确的发行版,因为您无法单独从录音的MBID得知哪个发行版应被视为“正确”。

,

最后找到了这个:https://acousticbrainz.org/。在浏览器中,您可以使用以下URL:https://acousticbrainz.org/<my acoustID>。从您的代码中,您可以从以下网址获取一个大的json数据文件,其中包含该轨道上的所有元数据:https://acousticbrainz.org/api/v1/<my acoustID>/low-level

对于python脚本,您可以使用以下代码:

import acoustid
import urllib.request,json

file = "path/to/myAudioFile"
API_KEY = 'cSpUJKpD'

candidates = acoustid.match(API_KEY,file)  # returns a generator of candidates

best_score,best_acoustId,best_title,best_artist = next(candidates)

metadata = {}
with urllib.request.urlopen("https://acousticbrainz.org/api/v1/" + best_acoustId + "/low-level") as url:
    data = json.loads(url.read().decode())
    metadata = data['metadata']

有关acoustid.match()的更多信息,您可以检查其github页面,尤其是在这里:https://github.com/beetbox/pyacoustid/blob/master/aidmatch.py

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?