AppleScript: come aggiungere i meta-dati m4a usando Sound Studio?

3

Mi piacerebbe automatizzare l'aggiunta di metadati a vari file .m4a usando Sound Studio . Ho uno script Python che verrà eseguito attraverso tutti i file a cui tengo e passerò i dati utili a un AppleScript che può effettivamente manipolare i metadati. Ma non sono sicuro di quale sia il modo migliore per fare la manipolazione dei metadati in AppleScript.

Posso ottenere tutti i metadati nello script AppleScript passando gli elementi nello script tramite argomenti, ma non so come aprire il file e impostare gli elementi di metadati che voglio impostare. Sembra che dovrebbe essere facile, ma tutti i tentativi che ho fatto finora hanno fallito. Sono sicuro di non capire il modo corretto di affrontare il problema. L'ho fatto finora:

on run argv
    -- Arguments:
    --  1   music_file_path   full path to the file to open
    --  2   artist               name of artist
    --   3   album_name    name of the album
    --    4   track_name         just the name of the track
    --    5   disc_number        which disc (1, 2 ...)
    --    6   track_number      which track on the disc
    --    7   release_year       the year when the track was released

    if (count of argv's items) ≠ 7 then
        display dialog "Wrong number of arguments!" with title "Add Meta Data To Sound Studio File" buttons {"Bummer"} giving up after 1
        return
    end if

    set music_file_path to item 1 of argv
    set artist_name to item 2 of argv
    set album_name to item 3 of argv
    set track_name to item 4 of argv
    set disc_number to item 5 of argv
    set track_number to item 6 of argv
    set release_year to item 7 of argv


    tell application "Finder"
        launch "/Applications/Sound Studio/Sound Studio.app"
    end tell -- Finder

    tell application "Sound Studio"
        activate
        set mfp to (a reference to POSIX file music_file_path)
        open mfp
        -- Set open'ed file's meta data to what we want
        save
        close
    end tell -- Sound Studio.app
end run

Qualche idea su come farlo funzionare?

    
posta Bill G 17.03.2018 - 01:58
fonte

1 risposta

0

Ho scaricato una versione di prova dell'ultimo Studio sonoro e ho provato. Il dizionario AppleScript era tutto ciò che era necessario. Ad eccezione del comando open , tutte le altre informazioni necessarie per comporre lo script provengono dalla documentazione in Script Editor .

L'assenza di una voce per il comando open è un po 'misteriosa e li ho inviati via email. Ho anche notato un "bug" (?) Nel software nel modo in cui risponde a open , sebbene tecnicamente non possa essere classificato come un bug dato che non è documentato come un comando supportato. Tuttavia, l'unico altro comando che sarebbe usato per aprire file e creare nuovi documenti sarebbe il comando make , ma, avendo giocato con questo, sono abbastanza sicuro che open sia il comando corretto da usare, e hanno semplicemente omesso di documentarlo correttamente, ma anche di ignorarne il comportamento saltuario.

Comunque, ecco lo script, con i dati del mio file di test che sostituiscono quello che verrà inviato allo script dal tuo script Python:

    # Script:   Add Metadata To Sound Studio File.applescript
    # Author:   CJK
    # Date:     2018-03-20
    #-------------------------------------------------------------------------------
    # @arguments:
    #       %argv%      an indexed list containing 7 items:
    #  
    #           1) full path to the file to open
    #           2) name of artist
    #           3) name of the album
    #           4) just the name of the track
    #           5) which disc (1, 2 ...)
    #           6) which track on the disc
    #           7) the year when the track was released
    #-------------------------------------------------------------------------------
    set argv to [¬
        "/Users/CK/Music/Nelly Furtado/Folklore/04 Try.m4a", ¬
        "Nelly Furtado", ¬
        "Folklore", ¬
        "Try", ¬
        "1", ¬
        "4", ¬
        "2003"] -- remove this variable declaration

    # on run argv -- uncomment this handler

        if (count argv) is not 7 then return display dialog ¬
            "Wrong number of arguments!" with title ¬
            "Add Metadata To Sound Studio File" buttons ¬
            {"Bummer"} giving up after 1


        tell application "Sound Studio"
            activate

            set music_file_path to the first item of argv

            set D to open (music_file_path as POSIX file)

            tell the metadata of D to set [¬
                artist, ¬
                album, ¬
                title, ¬
                disc number, ¬
                track number, ¬
                year] to the rest of argv

            save D
            close D

            --quit
        end tell

    # end run -- uncomment this line
    #----------------------------------------------------------------------------END

Non c'è molto da dire sullo script: apre Sound Studio , apre un file audio, assegna alcuni valori alle proprietà dei metadati, salva il file, quindi chiude il file. Opzionalmente, puoi uscire dall'applicazione anche a questo punto.

Per quanto riguarda l'apertura del file audio, Sound Studio sembra che il contenuto abbia un riferimento POSIX file invece di doverlo forzare in alias class. Tuttavia, ho notato un paio di stranezze:

❶ · Quando ho provato a definire la variabile music_file_path al di fuori del blocco tell , si è comportata come hai detto e semplicemente non ha aperto il file, ma non ha restituito un errore. Lo script si è bloccato fino a quando non è scaduto.

❷ · Non mi piaceva nemmeno che io esprimessi il riferimento del file come POSIX file music_file_path , quindi ho dovuto scriverlo come music_file_path as POSIX file . Di nuovo, fermerebbe lo script, piuttosto che lamentarsi del fatto che il riferimento al file fosse sbagliato.

❸ · Se ho corretto entrambi questi problemi e ho cercato di eseguire lo script subito dopo l'interruzione di una precedente esecuzione, lo script si bloccava di nuovo. Quindi ho dovuto interrompere il processo Sound Studio da Terminal emettendo un killall "Sound Studio" . Poi, quando ho eseguito la sceneggiatura, ha funzionato abbastanza felicemente, e ho continuato a lavorare serenamente con ogni successiva esecuzione dopo l'esecuzione. Quando sono andato di nuovo a riprovare con la sceneggiatura per provocare di proposito uno stallo, non mi sorprende che ho dovuto ancora una volta tornare in Terminal per fare un killall .

Quindi penso che sia abbastanza sicuro dire che questo è un problema con Sound Studio e non con lo script. Li ho mandati via email, ma penso che non sarebbe sbagliato mandarli per e-mail: più report ricevono da clienti scontenti che vogliono che la tecnologia AppleScripting sia implementata e supportata correttamente, maggiore è il loro incentivo fallo.

Ho preso in considerazione l'ipotesi di inserire una clausola in AppleScript affinché emettesse il suo comando di shell quando rileva che l'applicazione si è bloccata cercando di aprire un file. L'AppleScript potrebbe fare un killall , ma per qualche motivo non mi ha trovato molto d'accordo. L'applicazione Sound Studio stessa non non funzionava e continuava a essere operativa durante i test.

Se fai vuoi che imposti una specie di blocco nello script per gestire le istanze in cui potrebbe bloccarsi, fammelo sapere e posso aggiungere una modifica. Ma non sarebbe quello che chiamerei "clean cut code", e fintanto che non provi a cambiare come e dove il riferimento al file è dichiarato nello script, dovrebbe funzionare bene.

    
risposta data 20.03.2018 - 13:46
fonte

Leggi altre domande sui tag