问题描述
我有一个带有未知标签的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