3 votos

¿Cómo puedo activar sucesivamente un AppleScript de forma muy rápida?

Fondo

Para el ajuste fino del volumen utilizo 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 de costumbre.

Problema

El uso de este script tiene desventajas:

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

Parece que mi problema se debe a una limitación del cómo se activan los scripts. . Por ejemplo, cuando utilizo FastScript, no se vuelve a ejecutar el script. antes de se ha terminado. Lo mismo ocurre con Quicksilver.

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

Pregunta

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

2voto

Brian Puntos 11

Añadir > /dev/null 2>&1 & hasta el final del do shell script debería funcionar. Esto redirige el stdout y stderr de la do shell script comando para /dev/null y ejecuta el shell script en segundo plano, lo que significa que AppleScript ya no necesita esperar a que el comando devuelva stdout o stderr antes de que el AppleScript script pueda terminar. Esto significa que termina y puede ejecutarse de nuevo mucho más rápidamente.

Tampoco debería necesitar el 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 este consejo de MacScripter (un excelente recurso para AppleScripting) en un Correo electrónico: sobre la ejecución de varias instancias de un script de shell.

1voto

binarybob Puntos 6395

¿Qué tal si añadimos un ampersand al final de la línea afplay línea para que la parte guionizada se reproduzca en segundo plano? Por ejemplo

afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &

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