AppleScript: ¿Cómo agregar metadatos m4a mediante Sound Studio?

3

Me gustaría automatizar la adición de metadatos a varios archivos .m4a usando Sound Studio . Tengo una secuencia de comandos de Python que se ejecutará a través de todos los archivos que me importan y pasa datos útiles a un AppleScript que realmente puede manipular los metadatos. Pero no estoy seguro de cuál es la mejor manera de realmente hacer la manipulación de metadatos en AppleScript.

Puedo obtener todos los metadatos en el script de AppleScript pasando los elementos al script mediante argumentos, pero no sé cómo abrir el archivo y configurar los elementos de metadatos que quiero configurar. Parece que debería ser fácil, pero todos los intentos que he hecho hasta ahora han fracasado. Estoy seguro de que no estoy entendiendo la forma correcta de abordar el problema. Tengo esto hasta ahora:

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

¿Alguna idea sobre cómo hacer que esto funcione?

    
pregunta Bill G 17.03.2018 - 01:58

1 respuesta

0

Descargué una versión de prueba de la última Sound Studio y lo probé. El diccionario de AppleScript era todo lo que se requería. Con la excepción del comando open , toda la otra información necesaria para componer el script provino de la documentación incluida en Script Editor .

La ausencia de una entrada para el comando open es un poco misteriosa y les he enviado un correo electrónico. También noté un "error" (?) En el software en la forma en que responde a open , aunque técnicamente no se puede clasificar como un error dado que no está documentado como un comando que sea compatible. Sin embargo, el único otro comando que se usaría para abrir archivos y crear nuevos documentos sería el comando make , pero, después de haber jugado con eso, estoy bastante seguro de que open es el comando correcto a usar, y simplemente no lo documentaron correctamente, al tiempo que pasaron por alto su comportamiento ocasional errático.

De todos modos, aquí está la secuencia de comandos, con los datos de mi archivo de prueba reemplazando lo que se enviará a la secuencia de comandos desde su secuencia de comandos de 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

No hay mucho que decir sobre el script: abre Sound Studio , abre un archivo de audio, asigna algunos valores a las propiedades de metadatos, guarda el archivo y luego lo cierra. Opcionalmente, también puede salir de la aplicación en este punto.

Con respecto a la apertura del archivo de audio, Sound Studio parece estar contento con una referencia POSIX file en lugar de tener que obligarlo a la clase alias . Sin embargo, noté un par de rarezas:

❶ ・ Cuando intenté definir la variable music_file_path fuera del bloque tell , se comportó como usted mencionó y simplemente no abrió el archivo, pero tampoco devolvió un error. El script se estancó hasta que se agotó el tiempo.

❷ ・ Tampoco me gustó que expresara la referencia del archivo como POSIX file music_file_path , así que tuve que escribirlo como music_file_path as POSIX file . De nuevo, detendría el script, en lugar de quejarse de que la referencia del archivo era incorrecta.

❸ ・ Si corregía estos dos problemas e intentaba ejecutar el script justo después de que una ejecución anterior lo hubiera estancado, el script se detendría una vez más. Así que tuve que matar el proceso de Sound Studio desde Terminal emitiendo un killall "Sound Studio" . Luego, cuando ejecuté el script, funcionó bastante feliz y continué trabajando felizmente con cada ejecución sucesiva tras otra. Cuando fui a atornillar nuevamente con el script para causar un bloqueo intencionalmente, no fue sorprendente que una vez más tuve que volver a Terminal para hacer un killall .

Entonces, creo que es bastante seguro decir que este es un problema con Sound Studio y no con el script. Les he enviado un correo electrónico al respecto, pero creo que no se equivocaría si también los enviara por correo electrónico: cuantos más informes reciban de clientes descontentos que desean que la tecnología AppleScripting se implemente y soporte de manera adecuada, más incentivos tendrán para hazlo.

Consideré poner una cláusula en el AppleScript para que emita su propio comando de shell cuando detecta que la aplicación se había detenido al intentar abrir un archivo. El AppleScript podría hacer un killall , pero eso no me sentó muy bien por alguna razón. La aplicación Sound Studio en sí misma no se detuvo, y continuó funcionando durante las pruebas.

Si sí quiere que coloque algún tipo de bloqueo en el script para manejar cualquier instancia en la que pueda detenerse, hágamelo saber y puedo agregar una edición. Pero no sería lo que yo llamaría "código de corte limpio", y mientras no intente cambiar cómo y dónde se declara la referencia del archivo en el script, debería funcionar bien.

    
respondido por el CJK 20.03.2018 - 13:46

Lea otras preguntas en las etiquetas