Soy nuevo aquí y tengo una aclaración adicional o necesito ayuda adicional para un problema de este hilo: Applescript: "no se puede obtener el grupo de pestañas 1 de la ventana" (El Capitán)
En mi panel de preferencias, además de los auriculares y la salida digital, también tengo 2 monitores Apple y me gustaría tener la opción de seleccionar uno de ellos como salida (es decir, el primero de la lista).
Básicamente, necesito ayuda para ajustar su solución para poder seleccionar la tercera fila o el primer monitor como salida de sonido. O una forma de lograr esto sin saber cómo editar AppleScript para una configuración diferente.
Con un poco de experimentación con el guión de Arthur Hammer, descubrí que las líneas set deviceselected to "xyz"
parecen ser solo comentarios visuales mientras estoy en el Editor de guiones y no parecen ser parte de la funcionalidad real.
El cambio real parece ser solo entre 2 líneas elegidas en el Panel de control; entonces, si solo necesita cambiar entre 2 salidas, puede usar los números de fila.
En este ejemplo, los eliminé para que fueran variables, por lo que no necesita profundizar en el script para cambiar las líneas requeridas...
Como tiene más de 2 salidas, la primera vez que cambie no necesariamente irá desde/hacia el dispositivo correcto, pero lo hará después de eso.
Por ejemplo, si desea cambiar entre las salidas 3 y 4, pero actualmente se seleccionó 2, el primer cambio sería de "no 3" en lugar de "es 3" [espero que comprenda esa complicada explicación]
(*
Applescript to toggle between two sound outputs by Line number, ¬
as they appear in the Sound Control Panel. Based on code by ¬
Arthur Hammer http://apple.stackexchange.com/a/209434/85275
*)
set outputA to 3 --change this to the actual 'line number' of your first desired output
set outputB to 4 --change this to the actual 'line number' of your second desired output
--the rest of the script will use these vales as a switch
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.sound"
end tell
tell application "System Events"
tell application process "System Preferences"
repeat until exists tab group 1 of window "Sound"
end repeat
tell tab group 1 of window "Sound"
click radio button "Output"
if (selected of row outputA of table 1 of scroll area 1) then
set selected of row outputB of table 1 of scroll area 1 to true
else
set selected of row outputA of table 1 of scroll area 1 to true
end if
end tell
end tell
end tell
--tell application "System Preferences" to quit
--remove the comment '--' tag above to make the control panel quit afterwards, leave for testing.
Tal vez una pequeña aclaración pictórica: al usar el script anterior con salida A = 3 y salida B = 4, ahora puedo cambiar entre Digital Out y TonePort UX2.
Una nota más: los números de línea no tienen que ser consecutivos, podría cambiar fácilmente entre parlantes internos y TonePort usando las líneas 1 y 4.
@Tetsujin: gracias por esta solución. Funciona perfectamente. Lo estoy usando para cambiar entre mi audio incorporado (para cuando estoy codificando para el trabajo) y mi tarjeta Universal Audio Apollo (para cuando estoy haciendo producción musical). Dado que el dispositivo UAudio también ofrece una opción de micrófono de entrada superior, también agregué el interruptor de entrada obvio después de la sección "Salida":
click radio button "Input"
if (selected of row outputA of table 1 of scroll area 1) then
set selected of row outputB of table 1 of scroll area 1 to true
else
set selected of row outputA of table 1 of scroll area 1 to true
end if
En Mojave, por lo general cambio manualmente el dispositivo de salida desde el Control de volumen en el menú, así que automatizo lo mismo usando el AppleScript a continuación, que cambia según lo que está marcado/desmarcado.
Si usa esto con algunos lanzadores, entonces este enfoque no necesita permisos para las Preferencias.
ignoring application responses
tell application "System Events" to tell process "SystemUIServer"
click menu bar item 5 of menu bar 1 -- May need to change the index as needed
end tell
end ignoring
-- Optional, but just to avoid the 5-6sec delay
delay 0.25
do shell script "killall System\\ Events"
tell application "System Events" to tell process "SystemUIServer"
tell menu bar item 5 of menu bar 1
set device1 to menu item "Name of Device 1" of menu 1
set device2 to menu item "Name of Device 2" of menu 1
if (value of attribute "AXMenuItemMarkChar" of device1) as string is "✓" then
click device2
else
click device1
end if
end tell
end tell
No puedo adivinar un AppleScript general, pero me gusta y uso Automator para registrar los pasos necesarios.
Abra esa herramienta y cree un nuevo flujo de trabajo. Luego presione el botón de grabar. Luego puede grabar la secuencia utilizada para abrir las Preferencias del sistema, seleccionar el panel que desee, seleccionar el audio que desea y luego finalizar la grabación.
Por lo general, puede revisar las acciones y recortarlas o agregar demoras si es necesario usando Automator y no necesitará saber cómo programar las filas y los elementos en Applescript.
¡tipo! Ese script a continuación fue preparado por mí y no le importa cuántos dispositivos tiene realmente. Funcionará en cualquier caso:
tell application "System Preferences" to ¬
reveal anchor "output" of pane id "com.apple.preference.sound"
tell application "System Events"
tell application process "System Preferences"
repeat until exists tab group 1 of window "Sound"
delay 0.1
end repeat
tell tab group 1 of window "Sound"
set DevicesCount to count rows of table 1 of scroll area 1
repeat with n from 0 to DevicesCount
if (selected of row n of table 1 of scroll area 1) then
set SelectedDevice to n
end if
end repeat
if (SelectedDevice < DevicesCount) then
set NewDevice to SelectedDevice + 1
set selected of row NewDevice of table 1 of scroll area 1 to true
else
set selected of row 1 of table 1 of scroll area 1 to true
end if
end tell
end tell
end tell
quit application "System Preferences"
bmike
códigobrauer