如何比较MusicBrainz-Picard插件中的两个版本?

2024-09-30 10:34:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在试图写一个Picard插件。我的想法是让它自动插入音译曲目列表,作为用非拉丁语脚本编写的曲目标题发行版的注释。MusicBrainz将这些音译作为与实际发行版并行存在的伪发行版。例如,对于a given release,我必须首先读取相关版本ID的关系。然后我必须将这些曲目的标题转移到我的文件的评论字段中。在伪代码中:

pseudo_release = actual_release.getTransliteration() # As indicated in a relationship
i = 1
while i <= actual_release.numTracks():
    actual_release.getTrack(i).setComment(pseudo_release.getTrack(i).getTitle())
    i++

第一行我不知道该怎么做。由于关系不能作为Picard变量使用,因此不能通过API中指定的任何方式访问它。在

我已经查过Picard和the standalone web service的来源,但是没有找到任何东西。这有可能吗?如果有,我该怎么做?在


Tags: 版本脚本插件标题列表音译release关系
2条回答

MusicBrainz Web Service中,您可以获得如下音译版本: https://musicbrainz.org/ws/2/release/1492ce2b-a9ee-4aa3-b9e2-b18ad093bc51?inc=release-rels (注意inc=release-rels)。 您也可以使用json web service。在

使用python-musicbrainzngs可以执行类似musicbrainzngs.get_release_by_id("1492ce2b-a9ee-4aa3-b9e2-b18ad093bc51",includes=["release-rels"])的操作。在

但是,Picard不提供musicbrainzngs。因此,您要么必须单独安装python musicbrainzngs,如果没有它,您的插件将无法工作,或者您必须使用Picard提供的模块。我不确定Picard元数据中到底包含了什么,不包含什么,但这些模块可能有帮助:picard.albumpicard.webservice和{a7}。在

如果您编写元数据处理器,则Picard中提供了有关关系的信息,包括音译的tracklistings。迭代发布的所有关系的简单插件如下所示:

PLUGIN_NAME = "Find transliterated tracklisting relationships"
PLUGIN_AUTHOR = "Wieland Hoffmann"
PLUGIN_DESCRIPTION = "I'm too lazy"
PLUGIN_VERSION = "0.1"
PLUGIN_API_VERSIONS = ["1.0"]

from picard.metadata import register_album_metadata_processor
from picard import log


# The relationship type id for transliterations from
# https://musicbrainz.org/relationship/fc399d47-23a7-4c28-bfcf-0607a562b644
TRANS_REL_UUID = "fc399d47-23a7-4c28-bfcf-0607a562b644"


@register_album_metadata_processor
def find_transliteration_relationship(album, metadata, release):
    if "relation_list" in release.children:
        for rel in release.relation_list:
            if rel.relation[0].type_id == TRANS_REL_UUID:
                log.info("Found a transliterated tracklisting relationship")
                for release in rel.relation[0].release:
                    log.info("Its target is https://musicbrainz.org/release/%s",
                             release.id)

传递给处理器的release参数是PicardsXmlNode类的一个实例,它的结构(包括它的子对象)类似于通过web服务向MusicBrainz服务器询问此版本所获得的XML(this是它为示例发行版返回的内容,如果您只询问关系)。现在你有了关系目标的MBID,您可以使用Picards webservice模块的get方法(albumstagger.xmlws属性是XmlWebService类的一个实例)向MusicBrainz网站发送另一个请求,请求有关该发行版的数据(不要忘了加入并减少albums_requests属性,这样它在您完成加载之前不会完成加载步骤更改了数据)。在

其他一些使用这个来请求和处理更多数据的插件是the album artist website和{a5}插件。在

/edit:我刚刚得到通知,已经有a ticket来改进Picard如何处理伪发布,它有一个指向a plugin做你想做的事情的链接。在

相关问题 更多 >

    热门问题