0

私は Picard プラグインを作成しようとしています。私の考えでは、ラテン語以外のスクリプトで書かれたトラック タイトルを持つリリースのコメントとして、音訳されたトラック リストを自動的に挿入することです。MusicBrainz には、これらの音訳が、実際のリリースと並行して存在する疑似リリースとして含まれています。たとえば、特定のリリースの場合、関連するリリースの 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 のソースとスタンドアロンの Web サービスを調べましたが、何も見つかりませんでした。これはまったく可能ですか?もしそうなら、どうすればいいですか?

4

2 に答える 2

2

メタデータ プロセッサを作成すると、音訳されたトラックリストを含む関係に関する情報を Picard で利用できます。リリースのすべての関係を繰り返す単純なプラグインは次のようになります。

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引数は、Picards XmlNodeクラスのインスタンスであり、その構造 (子オブジェクトを含む) は、Web サービスを介してこのリリースについて MusicBrainz サーバーに問い合わせることによって取得される XML に似ています (これは、例に対して返されるものです)関係についてのみ尋ねる場合は解放してください)。リレーションシップ ターゲットの MBID を取得したので、Picards Web サービス モジュールのgetメソッド ( albumstagger.xmlws属性は XmlWebService クラスのインスタンス) を使用して、そのリリースに関するデータを求める別の要求を MusicBrainz Web サイトに送信できます (don' t をインクリメントおよびデクリメントするalbumのを忘れる_requestsそのため、データを変更するまでロード手順は完了しません)。

これを使用してさらにデータを要求および処理する他のプラグインには、アルバム アーティストの Web サイトLast.FM.Plusプラグインがあります。

/edit: Picard が疑似リリースを処理する方法を改善するためのチケットが既にあることを知らされました。これには、やりたいことを実行するプラグインへのリンクがあります。

于 2014-07-08T17:03:42.470 に答える