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.