¿Cómo puedo activar sucesivamente un AppleScript muy rápidamente?

3

Fondo

Para un ajuste fino del volumen, uso el siguiente AppleScript:

try
    do shell script "killall afplay"
end try
set currentVolume to output volume of (get volume settings)
set volume output volume (currentVolume + 2)
    -- play volume changing sound at new volume
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"

Esto aumentará el volumen en un 2% y reproducirá el nuevo volumen una vez como siempre.

Problema

El uso de este script tiene desventajas:

  • Cuando desencadené el script rápidamente varias veces seguidas, no responde tan rápido como lo haría el cambio de volumen "normal".
  • Para cada ejecución, el volumen del sonido se reproduce en toda su longitud.

Parece que mi problema se debe a una limitación de cómo se activan los scripts . P.ej. Cuando use FastScript, no ejecutará el script nuevamente antes , se habrá terminado. Lo mismo ocurre con Quicksilver.

Sin embargo, cuando asigno el "script de volumen inferior" a Quicksilver y el "script de volumen más alto" a FastScripts I puedo activar ambos scripts muy rápido uno tras otro, así que: el script está bien. Creo que mi problema se debe a cómo se activan los scripts.

Pregunta

¿Cómo puedo activar un script sucesivamente muy rápido?

    
pregunta gentmatt 02.03.2012 - 18:03

2 respuestas

2

La adición de > /dev/null 2>&1 & al final del comando do shell script debería funcionar. Esto redirige los comandos stdout y stderr del comando do shell script a /dev/null y ejecuta el script de shell en segundo plano, lo que significa que AppleScript ya no necesita esperar a que el comando devuelva stdout o stderr antes El script de AppleScript puede terminar. Eso significa que termina y se puede ejecutar de nuevo mucho más rápido.

Tampoco debería necesitar el controlador try al principio. El siguiente script modificado debería funcionar:

set currentVolume to output volume of (get volume settings)
set volume output volume (currentVolume + 2)
-- play volume changing sound at new volume
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff > /dev/null 2>&1 &" 

Obtuve esta sugerencia de MacScripter (un excelente recurso para AppleScripting) en una publicación sobre cómo ejecutar múltiples instancias de un script de shell.

    
respondido por el joelseph 02.03.2012 - 22:12
1

¿Qué tal si se agrega un ampersand al final de la línea afplay para que la parte con guión se reproduzca en segundo plano? Me gusta esto

afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &
    
respondido por el binarybob 02.03.2012 - 19:59

Lea otras preguntas en las etiquetas