2 votos

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

Me gustaría automatizar la adición de metadatos a varios archivos .m4a usando Sound Studio. Tengo un script de Python que recorrerá todos los archivos que me interesan y enviará datos útiles a un AppleScript que puede manipular realmente los metadatos. Pero no estoy seguro cuál es la mejor manera de hacer la manipulación de metadatos en AppleScript.

Puedo pasar todos los metadatos al script de AppleScript pasando los elementos al script a través de argumentos, pero no sé cómo abrir el archivo y establecer los metadatos que quiero establecer. Parece que debería ser fácil, pero todos los intentos que he hecho hasta ahora han fallado. Estoy seguro de que no entiendo la forma correcta de abordar el problema. Hasta ahora tengo esto:

on run argv
    -- Argumentos:
    --  1   music_file_path   ruta completa del archivo a abrir
    --  2   artist               nombre del artista
    --   3   album_name    nombre del álbum
    --    4   track_name         solo el nombre de la pista
    --    5   disc_number        en qué disco (1, 2 ...)
    --    6   track_number      qué pista en el disco
    --    7   release_year       el año en que se lanzó la pista

    if (count of argv's items) != 7 then
        display dialog "¡Número incorrecto de argumentos!" with title "Agregar metadatos al archivo de Sound Studio" buttons {"Qué mal"} dando después de 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 (una referencia al archivo POSIX music_file_path)
        abrir mfp
        -- Establecer los metadatos del archivo abierto según lo que queremos
        guardar
        cerrar
    end tell -- Sound Studio.app
end run

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

0 votos

Estoy dejando un comentario en lugar de una respuesta porque no puedo probar nada, dado que no tengo Sound Studio. En primer lugar, elimina el bloque tell application "Finder". No está haciendo nada útil. El lanzamiento de Sound Studio está controlado por el comando activate en el siguiente bloque. En segundo lugar, ¿hay alguna razón para usar a reference to para utilizar la ruta del archivo? Si no, puedes quitarlo. Los comandos open en otras aplicaciones generalmente requieren una clase de objeto de archivo alias. Para convertir la ruta del archivo en un objeto alias, prueba esto: set mfp to POSIX file music_file_path as alias.

0 votos

Es mejor hacer esto fuera de cualquier bloque de código de tell de aplicación, aunque en esta instancia, realmente no importa si no vas a usar mfp en ningún otro bloque de código de tell de aplicación. En cuanto a cómo configurar los metadatos, deberías empezar leyendo el diccionario de AppleScript de Sound Studio: para hacer esto, cuando estés en Editor de Script, presiona L para mostrar la ventana de Biblioteca. En Finder, arrastra el icono de la aplicación Sound Studio.app sobre la ventana de Biblioteca del Editor de Script. Luego haz doble clic en la entrada de "Sound Studio" que se añadirá a la lista de diccionarios disponibles.

0 votos

Estoy familiarizado con el diccionario de AppleScript de Sound Studio. Lo que no comprendo es cómo hacer que una ventana en Sound Studio se ABRA realmente. Intenté la sugerencia de set map to POSIX file music_file_path as alias, seguido de open mfp, pero ninguna ventana se abre en realidad. Si alguien pudiera proporcionar un código de muestra sobre cómo abrir un documento que abra una ventana, y cómo configurar cualquier pieza de metadatos, entonces imaginaría save ("yes" como la opción para forzar un guardado sin pedir confirmación), y close mfp, sería muy apreciado.

0voto

qarma Puntos 71

Descargué una versión de prueba del último Sound Studio y le di una oportunidad. El diccionario AppleScript era todo lo que se requería. Con la excepción del comando open, toda la información necesaria para componer el script provenía de la documentación dentro de Script Editor.

La ausencia de una entrada para el comando open es un poco misteriosa y les envié un correo electrónico al respecto. También noté un "bug" (?) 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 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 jugar con eso, estoy bastante seguro de que open es el comando correcto a utilizar, y simplemente no lo documentaron adecuadamente, además de pasar por alto su comportamiento ocasionalmente errático.

De todas formas, aquí está el script, con mis datos de archivo de prueba tomando el lugar de lo que se enviará al script desde tu script de Python:

    # Script:   Add Metadata To Sound Studio File.applescript
    # Author:   CJK
    # Date:     2018-03-20
    #-------------------------------------------------------------------------------
    # @arguments:
    #       %argv%      una lista indexada que contiene 7 elementos:
    #  
    #           1) ruta completa del archivo a abrir
    #           2) nombre del artista
    #           3) nombre del álbum
    #           4) solo el nombre de la pista
    #           5) qué disco (1, 2 ...)
    #           6) qué pista en el disco
    #           7) el año en que se lanzó la pista
    #-------------------------------------------------------------------------------
    set argv to [¬
        "/Users/CK/Music/Nelly Furtado/Folklore/04 Try.m4a", ¬
        "Nelly Furtado", ¬
        "Folklore", ¬
        "Try", ¬
        "1", ¬
        "4", ¬
        "2003"] -- eliminar esta declaración de variable

    # on run argv -- descomentar este controlador

        if (count argv) no es 7 entonces regreso display dialog ¬
            "¡Número incorrecto de argumentos!" con título ¬
            "Agregar Metadatos al Archivo de Sound Studio" botones ¬
            {"¡Qué mal momento!"} abandonar después de 1

        decir aplicación "Sound Studio"
            activar

            establecer ruta_archivo_musica al primer elemento de argv

            establecer D a abrir (ruta_archivo_musica como archivo POSIX)

            decir la metadatos de D para establecer [¬
                artista, ¬
                álbum, ¬
                título, ¬
                número de disco, ¬
                número de pista, ¬
                año] al resto de argv

            guardar D
            cerrar D

            --salir
        end tell

    # end run -- descomentar esta línea
    #----------------------------------------------------------------------------FIN

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

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

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

❷・Tampoco le gustó que expresara la referencia del archivo como POSIX file ruta_archivo_musica, así que tuve que escribirlo como ruta_archivo_musica como archivo POSIX. Nuevamente, el script se detendría en lugar de quejarse de que la referencia del archivo estaba equivocada.

❸・Si corregí ambos problemas e intenté ejecutar el script inmediatamente después de que una ejecución anterior lo hubiera detenido, el script se detendría una vez más. Así que tuve que finalizar el proceso de Sound Studio desde Terminal emitiendo un killall "Sound Studio". Entonces, cuando ejecuté el script, funcionó felizmente y continuó funcionando felizmente con cada ejecución sucesiva después de ejecutarlo. Cuando fui a jugar con el script de nuevo para causar intencionalmente una detención, no fue sorprendente que tuve que volver a Terminal para hacer un killall.

Así que creo que es bastante seguro decir que este es un problema con Sound Studio y no con el script. Les envié un correo electrónico al respecto, pero creo que no estarías equivocado si también les envías un correo electrónico: cuantos más informes reciban de clientes descontentos que desean que la tecnología AppleScript se implemente y se brinde soporte adecuado, más incentivo tendrán para hacerlo.

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

Si quieres que añada algún tipo de bloque en el script para manejar cualquier caso en que pueda detenerse, házmelo saber y puedo agregar una edición. Pero no sería lo que yo llamaría un código "de corte limpio", y siempre y cuando no intentes cambiar cómo y dónde se declara la referencia del archivo en el script, debería funcionar bien.

0 votos

¡Esto hace el truco! El decir los metadatos de D para establecer [] a [] era lo que no sabía cómo hacer, por eso no completé un código específico allí. Nunca hubiera imaginado que decir ... era la forma de lograrlo. AppleScript es el COBOL de nuestros tiempos. Parece haber cierta peculiaridad en cuanto a Sound Studio, en términos de la falta de documentación para abrir y el comportamiento inexplicable de bloqueo. Uno también podría esperar que los permisos de apertura predeterminados fueran de solo lectura, no de lectura/escritura. Les enviaré un correo electrónico también sobre estas cosas peculiares. ¡Gracias de nuevo por la ayuda!

0 votos

Bueno ... CASI hace el truco. Depurando el script un poco más (Late Night SW's Script Debugger [[latenightsw.com]](https://latenightsw.com]) (que es genial) parece indicar que los metadatos para 'número de disco', 'total de discos', 'número de pista' y 'total de pistas' tienen problemas para ser recuperados (error -10000), un problema de la aplicación Sound Studio. Supongo que cualquier intento posterior de establecer esos valores está fallando (silenciosamente). Mi intento posterior de cerrar y guardar el archivo también está fallando (obstinada y silenciosamente). He enviado un correo electrónico a la gente de Sound Studio para tratar de resolver esto.

0 votos

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X