9 votos

Uso de Apple script para gestionar la selección de la salida de sonido

Soy nuevo aquí y tengo una aclaración adicional o necesito ayuda adicional para un tema de este hilo - Applescript: "no se puede obtener el grupo de pestañas 1 de la ventana" (El Capitan)

En mi panel de preferencias, además de los auriculares y la salida digital, también tengo 2 monitores de Apple y me gustaría tener la opción de seleccionar uno de ellos como salida (concretamente 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 manera de lograr esto sin saber cómo editar AppleScript para una configuración diferente.

0 votos

Bienvenido a Ask Different. He enlazado esto con la otra pregunta. ¿Podrías editar tu post para mostrar lo que tienes? Quizás añadiendo una imagen de la pantalla del panel de preferencias. Voy a añadir una respuesta que no requiere ningún tipo de aprendizaje de AppleScript si ese es el problema.

10voto

Tetsujin Puntos 23061

Con un poco de experimentación en el script descubrí que las líneas set deviceselected to "xyz" parecen ser sólo una retroalimentación visual mientras que en script Editor y no parecen ser parte de la funcionalidad real.

La conmutación real parece ser sólo entre 2 líneas elegidas en el Panel de Control; así que, si sólo necesitas cambiar entre 2 salidas cualesquiera, entonces puedes usar simplemente los números de fila.

En este ejemplo las he sacado para que sean variables, así que no tienes que hurgar en el script para cambiar las líneas necesarias

Como tienes más de 2 salidas, la primera vez que cambies no irá necesariamente del/al dispositivo correcto, pero sí después.
Por ejemplo, si quisieras cambiar entre las salidas 3 y 4, aunque la 2 estuviera seleccionada en ese momento, el primer cambio sería de "no 3" a "es 3" [espero que entiendas esa enrevesada 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 - utilizando el anterior script con outputA = 3 & outputB = 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 los altavoces internos y TonePort utilizando las líneas 1 y 4.

enter image description here

0 votos

Tenga en cuenta que si desea seleccionar dispositivos AirPlay, la línea de separación cuenta como un elemento.

4voto

Grandpa Mojo Puntos 31

@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 proporciona una opción de entrada de micrófono superior, he añadido el interruptor de entrada obvio también después de su 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

2voto

Keoma Puntos 1

En Mojave, suelo cambiar manualmente el dispositivo de salida desde el Control de Volumen en el menú, así que automatizo lo mismo usando el AppleScript de abajo que hace el cambio basado en lo que está marcado/desmarcado.

Si usas esto con algunos lanzadores, entonces este enfoque no necesita permisos en 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

1voto

Oskar Puntos 1242

No soy capaz de adivinar un AppleScript general, pero me gusta y uso Automator para registrar los pasos necesarios.

Abre esa herramienta y haz un nuevo flujo de trabajo. A continuación, pulse el botón de grabación. A continuación, puede grabar la secuencia utilizada para abrir Preferencias del Sistema, seleccionar el panel que desee, seleccionar el audio que desee y finalizar la grabación.

Por lo general, puedes revisar las acciones y recortarlas o añadir retrasos si es necesario usando Automator y no necesitarás saber cómo programar las filas y los elementos en Applescript.

0 votos

Lo he intentado varias veces sin éxito. No parece funcionar en El Capitán. La solución AppleScript del otro hilo funciona muy bien pero parece enfocada sólo para las 2 opciones de Auriculares o Salida Digital. Estoy seguro de que hay una revisión relativamente sencilla del script para que funcione.

0 votos

Sigo necesitando una solución y no tengo forma de contactar con Arthur Hammer que tenía una solución maravillosa en el hilo referenciado. Sr. Arthur Hammer, ¡espero que se encuentre con esto y pueda ayudar!

0 votos

@bmike - He retocado el script de Arthur para dar una solución viable para n salidas. Es un poco manual pero bastante sencillo de ajustar.

1voto

mindtab Puntos 1

¡chicos! Ese script de abajo fue preparado por mí y no le importa cuántos dispositivos tienes en realidad. 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"

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