In primo luogo, ecco la risposta breve:
track.duplicateTo_(newPlaylist)
Il problema è che iTunes.add_to_
invia il comando add
, che prende un file (alias) e li importa in una playlist; si desidera inviare il comando duplicate
, che accetta qualsiasi oggetto e crea un'altra copia dell'oggetto. Non hai un file, hai una traccia. (È possibile ottenere un file tramite track.location()
, ma non si vuole reimportare il file, basta copiare il brano.)
Inoltre, in questo caso, è necessario chiamare il metodo sulla traccia, piuttosto piuttosto che chiamarlo sull'app e passare la traccia.
La prima metà di questo è difficile da spiegare senza una solida conoscenza del modello a oggetti di iTunes (e del modello di AE al di sotto di esso). Ma non hai davvero bisogno di capirlo. Nella maggior parte dei casi, esaminando il dizionario di scripting di iTunes (in AppleScript Editor) e facendo tentativi ed errori (in AppleScript Editor o con py-appscript) puoi capire che cosa vuoi. (Assicurati di lavorare su una libreria di scarti, o di avere un backup ...) In questo caso, gli unici comandi che potrebbero essere sono add
, copy
, duplicate
, o move
, quindi basta provarli tutti e vedere cosa fanno . Oppure, in alternativa, vai su dougscripts e scarica un mucchio di campioni e trova quello che fa ciò che vuoi.
La seconda metà di questo, capire come tradurre in ScriptingBridge ... beh, non posso spiegarlo senza andare a lungo in SB (che ha molto meglio di me, se vuoi leggerne uno) . Ma le basi sono queste: per quanto riguarda iTunes, duplicate
è un comando. Se gli dai un oggetto diretto (tell application "iTunes" to duplicate theTrack to thePlaylist
) lo userà; in caso contrario, stai chiedendo all'argomento di duplicare se stesso (tell theTrack to duplicate to thePlaylist
). Funziona esattamente come l'inglese. Ma SB insiste su un modello orientato agli oggetti, dove duplicate
è un metodo su alcuni oggetti. Quindi, solo una di queste due forme funzionerà. In generale, è possibile capire quale, semplicemente guardando dir(iTunes)
e dir(track)
per vedere quale ha un metodo che assomiglia al comando desiderato.
Come puoi vedere da quanto sopra, hai molte prove ed errori davanti a te se stai cercando di fare qualcosa di complicato. Buona fortuna e continua a chiedere.
PS, non ho idea del perché il codice non funzioni in modo silenzioso. Il modo ovvio con cui il metodo add_to_
dovrebbe tradursi in un comando dovrebbe generare un errore -1708 (come appscript iTunes.add(track, to=newPlaylist)
o AppleScript add theTrack to newPlaylist
entrambi ...).
Dovrebbero darti un bonus per le risposte combo! Grazie. 'iTunes.add_to_' era un'aringa rossa, non pensavo di guardare altrove ma ora che lo spieghi, ha senso. – abroekhof