2014-07-07 2 views
0

나는 Picard 플러그인을 쓰려고 노력해왔다. 내 생각은 자동으로 음역 트랙 목록을 비 라틴어 스크립트로 작성된 트랙 제목이있는 릴리스에 대한 설명으로 삽입하는 것입니다. MusicBrainz는 이러한 음역을 실제 출시와 동시에 존재하는 유사 배포본으로 포함합니다. 예를 들어, a given release의 경우, 관련 릴리스의 ID에 대한 관계를 먼저 읽어야합니다. 그런 다음 해당 트랙의 제목을 내 파일의 주석 필드로 전송해야합니다. 의사 코드 :MusicBrainz Picard 플러그인의 두 릴리스를 비교하는 방법은 무엇입니까?

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도 찾았지만 아무 것도 찾을 수 없었습니다. 이 모든 것이 가능합니까? 그렇다면 어떻게해야합니까? 에서

답변

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 클래스 (자식 객체 포함) 구조의 인스턴스 인 XML과 유사 MusicBrainz 서버에 웹 서비스 (this)를 통해이 릴리스에 대해 묻는 것만으로도 관계에 대해 묻는다면 예제 릴리스로 반환됩니다. 이제 관계 대상의 MBID를 얻었으므로 Picard 웹 서비스 모듈 get 메서드 (속성은 XmlWebService 클래스의 인스턴스 임)를 사용하여 MusicBrainz 웹 사이트에 해당 요청에 대한 데이터를 요청하는 다른 요청을 보낼 수 있습니다 속성을 가져 오거나 줄이는 것을 잊지 마세요. 데이터를 변경 한 후에야로드 단계가 완료됩니다.

추가 데이터를 요청하고 처리하는 데 사용하는 일부 플러그인은 the album artist websiteLast.FM.Plus 개의 플러그인입니다.

/편집 : Picard가 원하는 작업을 수행하는 a plugin에 대한 링크가있는 pseudoreleases를 처리하는 방법을 개선하기 위해 이미 a ticket이 있음을 알게되었습니다.

0

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.album, picard.webservicepicard.mbxml.

+0

Picard를 통해 비표준 라이브러리를 사용할 수 있습니까? 2.7 용 python-musicbrainzngs를 설치했습니다.8을 pip-Win으로 사용하면 대화 형 인터프리터에서 제대로 작동하지만 플러그인에서 가져올 때 "ImportError : 모듈 이름이 musicbrainzngs가 아닙니다"오류가 발생합니다. –

+0

예, 가능해야하지만, 환경 변수를 알아 내거나 Picard가 찾은 특정 장소에 모듈을 두어야 할 수도 있습니다. 비록 내가 리눅스에서 일하는 것보다 윈도우에서이 일을하는 것이 아마도 더 어렵다는 것에 동의한다. – JonnyJD

+1

Picard에서 python-musicbrainzngs를 사용하는 것은 좋은 생각이 아닙니다. Picard는 (Py) Qt로 제작되어 비동기 프리미티브를 사용하기 때문에 네트워크를 통해 동기 요청을하는 라이브러리에 문제가 발생할 가능성이 큽니다. 그 외에 Windows의 Picard에 번들로 제공되는 Python 인터프리터에는 소켓 모듈 (iirc)이 포함되어 있지 않으므로 python-musicbrainzngs이 빌드 된 표준 라이브러리 네트워킹 모듈을 사용하기가 매우 어렵습니다. – Wieland