Apple ¿Alguien me ayuda a crear un script para cambiar la salida de audio en Yosemite?

iRock

Ex reportero de CHW y FayerWayer
Se incorporó
13 Diciembre 2007
Mensajes
1.451
Holas:

Les cuento. Tengo un headset conectado a mi iMac por USB, el cual uso únicamente cuando voy a jugar. El tema es que actualmente, para cambiar entre los distintos dispositivos de entrada y salida (headset versus micrófono y altavoces internos del Mac), tengo que estar manteniendo presionada la tecla ⌥ mientras hago clic en el icono del altavoz, en la barra de menú, con lo que se despliega el siguiente menú:

5zJxnin.png


A la larga ello se vuelve sumamente tedioso. Por eso quiero hacer un script o algo que me permita cambiar rápidamente entre una salida de audio y la otra (luego puedo asignarle un atajo de teclado con FastScripts).

El problema es que no tengo idea de programación, así que me gustaría saber si alguien ha hecho ya algo similar o podría ayudarme con el código necesario (imagino que no debe ser para nada complejo o extenso :xd).

Saludos y gracias de antemano.
 

iRock

Ex reportero de CHW y FayerWayer
Se incorporó
13 Diciembre 2007
Mensajes
1.451

¡Excelente! En ese enlace de MacWorld está justo lo que necesitaba. Gracias.

Ahora bien, el script que aparece en el artículo principal deja bastante que desear. Si alguien quiere hacer algo similar, le recomiendo echar un vistazo a los comentarios. Allí hay varios scripts que son mucho mejores que el original.

De entre esos scripts que postearon, el que estoy usando yo (y el más simple) es el último, que sería así:

Código:
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 "Internal Speakers")
    end tell
end tell
quit application "System Preferences"

Ahí es cosa de cambiar el “Internal Speakers” por el nombre de la salida de audio deseada.

El problema de este es que obliga a tener dos scripts casi idénticos: uno para cambiar a los altavoces internos y el otro para cambiar al headset. Por eso me gustaba también una opción que publicaron en otro comentario:

Código:
tell application "System Preferences" to activate
tell application "System Events"
    get properties
    tell process "System Preferences"
        click menu item "Sound" of menu "View" of menu bar 1
        delay 2
        clickradio button "Output" of tab group 1 of window "sound"
        delay 1
        set theRows to every row of table 1 of scroll area 1 of tab group 1 of window "sound"
        repeat with aRow in theRows
            if selected of aRow then
                set curr_output to (value of text field 1 of aRow as text)
                if curr_output is speakers then set desired_output to headset
                if curr_output is headset then set desired_output to speakers
                exit repeat
            end if
        end repeat
        repeat with aRow in theRows
            if (value of text field 1 of aRow as text) is desired_output then
                set selected of aRow to true
                exit repeat
            end if
        end repeat
    end tell
end tell
tell application "System Preferences" to quit

La gracia de este script es que si se encuentra actualmente seleccionado el headset, cambia a los altavoces internos, y si al momento de ejecutarlo se encuentran activados estos últimos, entonces selecciona el headset.

El problema del segundo script es que está basado en el que publicaron originalmente en el post principal, por lo que aparte de tener un montón de paja molida innecesaria, tiene una pifia, y si Preferencias del Sistema no está abierto, no funca. Por lo tanto hay que ejecutarlo dos veces (sin contar que abre Preferencias del Sistema y es mucho más lento).

Aquí es donde viene la pregunta del millón (e invoco a los hechiceros del código): ¿cómo “fusiono” esos dos scripts para conseguir la funcionalidad de este último (que un solo script haga todo) y la simpleza y efectividad del anterior (que sea sencillo, rápido y simplemente funcione)?
 
Upvote 0

Nautiluscl

El Psy Congroo
Se incorporó
7 Agosto 2007
Mensajes
4.222
Omg no tenía idea de la existencia de Applescript

Ahora si que definitivamente mi próximo note sera un MBP (ya le tome el gusto porque le regale uno a mi hermana)

Yo se programar pero ni idea de como hacer lo que quieres, sorry :(

Enviado desde mi Nexus 4 mediante Tapatalk
 
Upvote 0

Nautiluscl

El Psy Congroo
Se incorporó
7 Agosto 2007
Mensajes
4.222
básicamente twndrias que agregar un if para ver si ya esta abierto system preferences... Si no lo esta, abrirlo.... O sea aplicar algo así como tell aplication system preferences OPEN ( si es que eso existe)

Tendría que ir después de una sentencia else

Saludos!

Enviado desde mi Nexus 4 mediante Tapatalk
 
Upvote 0

Nautiluscl

El Psy Congroo
Se incorporó
7 Agosto 2007
Mensajes
4.222
Googlea en gral las sentencias if else

Toooodos los lenguajes los usan, son el escalón principal de cualquier programa

Enviado desde mi Nexus 4 mediante Tapatalk
 
Upvote 0

Rudel

Overclockero retirado.
Se incorporó
28 Octubre 2004
Mensajes
8.727
Upvote 0
Subir