0 votos

Cambio de las salidas de sonido con Applescript (parece que he perdido mi grupo de pestañas)

Estoy empezando con la advertencia de que esta es mi primera vez publicando, así que si me incumplimiento de la etiqueta, prometo que por accidente; sólo házmelo saber.

Estoy tratando de hacer un AppleScript para cambiar la salida de sonido en mi Mac con un comando de voz (me duelen mis brazos recientemente y han sido programación de automatismos y atarlos para el dictado). Y aunque he sido capaz de hacer un montón de cosas de trabajo, he tenido problemas con esto.

La realidad es frustrante, yo puedo, técnicamente, llegar a trabajar. He hecho la secuencia de comandos de la siguiente manera:

tell application "System Preferences"
    reveal anchor "output" of pane id "com.apple.preference.sound"
end tell

tell application "System Events" to tell process "System Preferences"
    tell table 1 of scroll area 1 of tab group 1 of window 1
        select (row 1 where value of text field 1 is "Andrea Comm USB-SA Headset")
    end tell
end tell

quit application "System Preferences"

Puedo ejecutar este, y va a cambiar mi salida de sonido para mi auricular. El problema es que una vez hecho, no puedo cambiar a otra cosa hasta que yo lo hago manualmente. Yo, literalmente, se repetía el guión y reemplazar el nombre de los auriculares con "auriculares", pero cuando lo ejecuto, me dice que no se puede obtener la ficha de uno de los del grupo 1. Incluso hice una completamente copia idéntica, que también cambia la salida para los auriculares, y tenía el mismo problema exacto.

Pero, si me voy y restablecer manualmente la salida, puedo correr esta misma secuencia de comandos para cambiar a los auriculares, y va a trabajar. A continuación, el otro script que no funcionan hasta he cambiado manualmente la salida de nuevo.

He mirado por todos lados, y no puedo encontrar una solución a este problema. Nadie parece tener este problema, pero lo he tenido a través de múltiples secuencias de comandos. Y aunque normalmente soy todo acerca de ser mi propio pequeño copo de nieve, en este caso no me ayuda alguna.

Cualquier ayuda que pueda ofrecer sería genial. Muchas gracias!

1voto

user3439894 Puntos 5883

Mientras que la otra respuesta no en el hecho de trabajar para mí en mi sistema que ejecuta macOS Alta de la Sierra, sin embargo, tengo que publicar un BESO principio de respuesta.

Basta con añadir el siguiente código a tu código:

repeat until exists tab group 1 of window "Sound"
    delay 0.1
end repeat

Así que su código se verá ahora como:

tell application "System Preferences"
    reveal anchor "output" of pane id "com.apple.preference.sound"
end tell

tell application "System Events" to tell process "System Preferences"
    repeat until exists tab group 1 of window "Sound"
        delay 0.1
    end repeat
    tell table 1 of scroll area 1 of tab group 1 of window 1
        select (row 1 where value of text field 1 is "Andrea Comm USB-SA Headset")
    end tell
end tell

quit application "System Preferences"

Hay definitivamente es un nivel de sofisticación a la otra respuesta; sin embargo, me imagino que puede ser un poco difícil de entender para aquellos que son nuevos para AppleScript y por qué un BESO principio de respuesta que se proporciona.

0voto

qarma Puntos 71

He probado tu script en mi sistema (System info: AppleScript versión: 2.7 Sistema de versión: 10.13.6), y funcionó perfectamente. Mi único pensamiento es un eco de la @ " tetsujin sugerencia acerca de la construcción de suficientes controles para asegurarse de elementos de interfaz de usuario existe antes de intentar hacer cosas con ellos.

Podría ser que su sistema está tomando más tiempo para cargar el Sistema de Preferencias de la ventana y su contenido y, por tanto, la secuencia de comandos se procede a ejecutar las siguientes líneas de código antes de tiempo, lo que resulta en un "can't get tab group 1" de error.

Sin embargo, esto no explicar satisfactoriamente por qué esto sucede en otras carreras de la secuencia de comandos, lo cual es muy extraño sonido.

He reescrito el guión y usado mi personal, estándar, formato que yo uso con todos estos Preferencia de Sistema de interfaz de usuario AppleScripts. Se ha construido en los controles para evitar la secuencia de comandos de procedimiento, salvo que el elemento de interfaz de usuario en cuestión, se confirma que existen (que da a la espera después de un corto período de tiempo, y termina la secuencia de comandos de regresar false, mientras que el éxito en la ejecución de la secuencia de comandos devuelve true).

use Prefs : application "System Preferences"
use sys : application "System Events"

property pane : a reference to pane id "com.apple.preference.sound"
property anchor : a reference to anchor "output" of my pane

property process : a reference to application process "System Preferences"
property window : a reference to window "Sound" of my process
property tab group : a reference to tab group 1 of my window
property scroll area : a reference to scroll area 1 of my tab group
property table : a reference to table 1 of my scroll area
property row : a reference to row 1 in my table

property Headphones : a reference to (my row where the value of ¬
    text field 1 = "Headphones")
property Headset : a reference to (my row where the value of ¬
    text field 1 contains "Andrea Comm")

on zzz(x, |ξ| as boolean)
    local x, |ξ|

    repeat 20 times -- 20 x 0.2s = 4s max. wait
        if |ξ| = (x exists) then return true
        delay 0.2
    end repeat

    false
end zzz

on quit e as boolean
    continue quit Prefs
    return e
end quit

--① quit 1
--② if zzz(my process, no) = false then return quit 0

reveal my anchor
if zzz(my row, yes) = false then return quit 0

select Headset --OR: Headphones
--③ quit 1

Hay tres líneas de comentarios, que he numerado. Estos pueden permanecer comentó a cabo durante la prueba de la secuencia de comandos, lo que garantizará el Sistema de Preferencias de la ventana permanece visible (una vez que lo he traído a un primer plano manualmente), así que usted puede ver físicamente si el dispositivo de salida está seleccionado o no. Si el script parece funcionar correctamente, puede quitar las marcas de comentario y traer esas tres líneas en juego, que permitirá a las Preferencias del Sistema para permanecer oculto, fuera de la vista durante un funcionamiento normal de la secuencia de comandos, dejar de Preferencias del Sistema en el extremo.

La penúltima línea es la que uno donde usted puede editar el nombre del dispositivo-ya sea Headphones o Headset (sin comillas), ambos de los cuales se ha declarado propiedades en el inicio de la secuencia de comandos y ya la casa de las referencias apropiadas a sus respectivos dispositivo del elemento de interfaz de usuario.

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: