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 de costumbre.
El uso de este script tiene desventajas:
Parece que mi problema se debe a una limitación de cómo se activan los scripts . Por ejemplo, cuando uso FastScript, no volverá a ejecutar el script antes de que haya terminado. Lo mismo ocurre con Quicksilver.
Sin embargo, cuando asigno la "secuencia de comandos de menor volumen" a Quicksilver y la "secuencia de comandos de mayor volumen" a FastScripts, puedo activar ambas secuencias de comandos muy rápidamente, una después de la otra, por lo que: la secuencia de comandos está bien. Creo que mi problema se debe a cómo se activan los scripts.
¿Cómo puedo activar sucesivamente un script muy rápido?
Agregar > /dev/null 2>&1 &
al final del do shell script
comando debería funcionar. Esto redirige stdout
y stderr
del do shell script
comando /dev/null
y ejecuta el script de shell en segundo plano, lo que significa que AppleScript ya no necesita esperar a que regrese el comando stdout
o stderr
antes de que finalice el script de AppleScript. Eso significa que finaliza y se puede ejecutar de nuevo mucho más rápido.
Tampoco debería necesitar el try
controlador 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 &"
Recibí este consejo de MacScripter (un excelente recurso para AppleScripting) en una publicación sobre cómo ejecutar varias instancias de un script de shell.
¿Qué tal agregar un ampersand al final de la afplay
línea para que la parte del guión se reproduzca en segundo plano? Como esto
afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &
binariobob
afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &
sido No digo que eso ayude, solo quiero corregirme :-)