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 ...).
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