2012-10-19 4 views
5

Ich habe gelernt, wie man eine Playlist in einer vorherigen Frage erstellt, aber jetzt kann ich nicht herausfinden, wie man Tracks hinzufügt. Im Moment habe ich:Wie man einen Track zu einer iTunes Playlist mit Python und Scripting Bridge hinzufügt

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) 

Meine Tracks sind in einer Liste von Tupeln tracks, wobei das erste Element des Tupels ist eine Punktzahl und die zweite ist die tatsächliche Spur Objekt. generatePlaylists ist ein Iterator, der alle Bibliotheksspuren in 10 Listen aufteilt.

Der obige Code läuft ohne Fehler, aber in iTunes sind die Wiedergabelisten leer.

Antwort

7

Zuerst, hier ist die kurze Antwort:

track.duplicateTo_(newPlaylist) 

Das Problem ist, dass iTunes.add_to_ sendet den add Befehl, der eine Datei (Alias) nimmt und importiert sie in eine Playlist; Sie möchten den Befehl duplicate senden, der ein beliebiges Objekt übernimmt und eine weitere Kopie des Objekts erstellt. Sie haben keine Datei, Sie haben eine Spur. (Du könntest eine Datei über track.location() bekommen, aber du willst die Datei nicht erneut importieren, kopiere die Spur einfach.)

Auch in diesem Fall musst du die Methode lieber auf der Spur aufrufen als es auf der App anzurufen und es die Spur zu übergeben.

Die erste Hälfte ist schwer zu erklären, ohne das iTunes-Objektmodell (und das AE-Modell darunter) zu verstehen. Aber du musst es nicht wirklich verstehen. In den meisten Fällen können Sie über das iTunes-Skriptwörterbuch (im AppleScript-Editor) und Trial-and-Error (im AppleScript-Editor oder mit py-appscript) herausfinden, was Sie wollen. (Stellen Sie sicher, dass Sie an einer Schrottbibliothek arbeiten oder eine Sicherungskopie haben ...) In diesem Fall sind die einzigen möglichen Befehle add, copy, duplicate oder move, also probieren Sie sie alle aus und sehen Sie, was sie tun . Oder, alternativ, gehen Sie zu dougscripts und laden Sie eine Reihe von Proben und finden Sie eine, die das tut, was Sie wollen.

Die zweite Hälfte davon, herauszufinden, wie zu ScriptingBridge zu übersetzen ... nun, ich kann es nicht erklären, ohne in eine lange Schwärmerei über SB (was has viel besser als ich, wenn Sie einen lesen wollen) . Aber die Grundlagen sind: Soweit es iTunes betrifft, ist duplicate ein Befehl. Wenn Sie ihm ein direktes Objekt geben (tell application "iTunes" to duplicate theTrack to thePlaylist), wird es das verwenden; Wenn nicht, bitten Sie das Subjekt, sich selbst zu duplizieren (tell theTrack to duplicate to thePlaylist). Es funktioniert genau wie Englisch. Aber SB besteht auf einem objektorientierten Modell, wobei duplicate eine Methode für irgendein Objekt ist. Also, nur eine dieser beiden Formen wird funktionieren. In der Regel können Sie herausfinden, welche bei einem Blick auf dir(iTunes) und dir(track) zu sehen, die man über eine Methode verfügt, die wie der Befehl sehen Sie wollen.

Wie Sie aus dem oben genannten erkennen können, haben Sie viel Versuch und Irrtum vor sich, wenn Sie versuchen, etwas Kompliziertes zu tun. Viel Glück und frage weiter.

PS, ich habe keine Ahnung, warum Ihr Code stumm schlägt. Die offensichtliche Methode, die die add_to_-Methode in einen Befehl übersetzen sollte, sollte einen Fehler von -1708 auslösen (wie appscript iTunes.add(track, to=newPlaylist) oder AppleScript add theTrack to newPlaylist beide tun ...).

+0

Sie sollten Sie einen Bonus für Combo Antworten geben! Vielen Dank. 'iTunes.add_to_' war ein Ablenkungsmanöver, ich habe nicht daran gedacht, woanders hin zu schauen, aber jetzt, wo du es erklärst, macht es Sinn. – abroekhof

Verwandte Themen