2012-10-19 6 views
5

이전 질문으로 재생 목록을 만드는 방법을 배웠으나 이제 트랙에 트랙을 추가하는 방법을 알 수 없습니다. 지금은이 :Python과 Scripting Bridge를 사용하여 iTunes 재생 목록에 트랙을 추가하는 방법

tracks.sort(key=lambda tup: tup[0]) 
i = 0 
for trackList in generatePlaylists(tracks,10): 
    i += 1 
    playlistname = str(i) 
    p = {'name': playlistname} 
    playlist = iTunes.classForScriptingClass_("playlist").alloc().initWithProperties_(p) 
    iTunes.sources()[0].playlists().insertObject_atIndex_(playlist, 0) 

    # Find the playlist I just made 
    for playlist in iTunes.sources()[0].playlists(): 
     if playlist.name() == playlistname: 
      newPlaylist = playlist 

    # Add the tracks to it 
    for track in trackList: 
     print track[1].name() 
     iTunes.add_to_(track[1],newPlaylist) 

내 트랙이 튜플의 첫 번째 요소는 점수이고 두 번째는 실제 트랙 개체입니다 튜플 tracks의 목록에 있습니다. generatePlaylists은 모든 라이브러리 트랙을 10 개의 목록으로 분할하는 반복자입니다.

위의 코드는 오류없이 실행되지만 iTunes에서는 재생 목록이 비어 있습니다.

답변

7

먼저, 여기에 짧은 대답 :

track.duplicateTo_(newPlaylist) 

문제는 iTunes.add_to_ 재생 목록에 파일 (별칭)과 수입을 걸리는 add 명령을 전송한다는 것입니다; duplicate 명령을 보내려고합니다.이 명령은 모든 개체를 가져 와서 개체의 다른 복사본을 만듭니다. 당신은 파일이 없으며, 트랙이 있습니다. (track.location()을 통해 파일을 가져올 수 있지만 파일을 다시 가져 오지 않고 트랙 만 복사하면됩니다.)

또한이 경우 트랙에서 메소드를 호출해야합니다 앱에서 호출하고 트랙을 전달하는 것보다

iTunes 객체 모델 (및 그 아래에있는 AE 모델)에 대한 확실한 이해 없이는 상반기를 설명하기가 어렵습니다. 그러나 당신은 그것을 정말로 이해할 필요가 없습니다. 대부분의 경우 iTunes 스크립팅 사전 (AppleScript 편집기에서) 및 시행 착오 (AppleScript 편집기 또는 py-appscript에서)를 통해 원하는 것을 파악할 수 있습니다. (스크랩 라이브러리 작업을하고 있는지 확인하십시오.)이 경우 가능할 수있는 명령어는 add, copy, duplicate 또는 move이므로 모두 시도해보고 수행하십시오. . 또는 dougscripts로 이동하여 샘플을 다운로드하여 원하는 작업을 수행하십시오.

후반부에 ScriptingBridge로 번역하는 방법을 알아 냈습니다 ... 글쎄, SB에서 긴 호언 장담하지 않고는 설명 할 수 없습니다 (하스는 나보다 훨씬 뛰어납니다). . 그러나 기본은 이것입니다 : iTunes와 관련하여, duplicate이 명령입니다. 직접 객체 (tell application "iTunes" to duplicate theTrack to thePlaylist)를 주면 그것을 사용할 것입니다. 그렇지 않다면, 당신은 그 자신에게 복제를 요구합니다 (tell theTrack to duplicate to thePlaylist). 그것은 영어와 똑같이 작동합니다. 그러나 SB는 객체 지향 모델을 고집합니다. duplicate은 어떤 객체의 메소드입니다. 따라서이 두 가지 형식 중 하나만 작동하게됩니다. 일반적으로 dir(iTunes)dir(track)을보고 어떤 명령이 원하는 명령과 비슷한 지 알 수 있습니다.

위에서 알 수 있듯이 복잡한 작업을 수행하려는 경우 앞에 시행 착오를 거듭해야합니다. 행운을 빈다. 계속 질문한다.

추신 : 귀하의 코드가 자동으로 실패하는 이유를 모르겠습니다. add_to_ 메서드가 명령으로 변환되어야하는 확실한 방법은 -1708 오류를 발생시켜야합니다 (예 : iTunes.add(track, to=newPlaylist) 또는 AppleScript add theTrack to newPlaylist 모두 ...).

+0

그들은 콤보 답변에 보너스를 줘야합니다! 감사. 'iTunes.add_to_'는 붉은 청어 였고, 다른 곳에서는 보지 않겠다고 생각했지만, 이제는 설명해 드리겠습니다. – abroekhof

관련 문제