11 votes

Utilisation du script d'Apple pour gérer la sélection de la sortie sonore.

Je suis tout nouveau ici et j'ai besoin d'un éclaircissement supplémentaire ou d'une aide supplémentaire pour un problème de ce fil de discussion. Applescript : "Can't get tab group 1 of window" (El Capitan)

Dans mon panneau de préférences, en plus du casque et de la sortie numérique, je dispose également de deux moniteurs Apple et j'aimerais avoir la possibilité de sélectionner l'un d'eux comme sortie (à savoir le premier de la liste).

J'ai essentiellement besoin d'aide pour ajuster sa solution afin de pouvoir sélectionner la troisième rangée ou le premier moniteur comme sortie sonore. Ou un moyen d'accomplir ceci sans savoir comment éditer AppleScript pour une configuration différente.

11voto

Tetsujin Points 95239

Avec un peu d'expérimentation sur le script d'Arthur Hammer, j'ai découvert que les lignes set deviceselected to "xyz" semblent n'être qu'un feedback visuel dans l'éditeur script et ne semblent pas faire partie de la fonctionnalité réelle.

La commutation réelle semble se faire entre 2 lignes choisies dans le panneau de contrôle ; ainsi, si vous avez juste besoin de commuter entre 2 sorties, vous pouvez simplement utiliser les numéros de ligne.

Dans cet exemple, je les ai élevés au rang de variables, de sorte que vous n'avez pas besoin de plonger dans le script pour modifier les lignes requises

Comme vous avez plus de 2 sorties, la première fois que vous commutez, il ne va pas nécessairement aller de/vers le bon appareil, mais il le fera par la suite.
Par exemple, si vous souhaitez commuter entre les sorties 3 et 4, alors que la sortie 2 est actuellement sélectionnée, le premier changement sera de "pas 3" par opposition à "est 3" [j'espère que vous comprenez cette explication alambiquée].

(*
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.

Peut-être une petite clarification picturale - en utilisant le script ci-dessus avec outputA = 3 & outputB = 4, je peux maintenant commuter entre Digital Out & TonePort UX2.

Une autre remarque - les numéros de ligne ne doivent pas être consécutifs, je pourrais tout aussi bien passer des haut-parleurs internes au TonePort en utilisant les lignes 1 et 4.

enter image description here

4voto

Grandpa Mojo Points 41

@Tetsujin - merci pour cette solution. Elle fonctionne parfaitement. Je l'utilise pour basculer entre mon système audio intégré (pour quand je code pour le travail) et ma carte Universal Audio Apollo (pour quand je fais de la production musicale). Puisque le dispositif UAudio fournit également une option de micro d'entrée supérieure, j'ai ajouté le commutateur d'entrée évident également après votre section "Sortie" :

    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

Kenston Choi Points 131

Dans Mojave, j'ai l'habitude de changer manuellement le périphérique de sortie à partir du contrôle du volume dans le menu, donc j'automatise la même chose en utilisant l'AppleScript ci-dessous qui fait le basculement en fonction de ce qui est coché/décoché.

Si vous l'utilisez avec certains lanceurs, cette approche n'a pas besoin de permissions dans les Préférences.

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 Points 1242

Je ne suis pas capable de deviner un AppleScript général, mais j'aime et j'utilise Automator pour enregistrer les étapes nécessaires.

Ouvrez cet outil et créez un nouveau flux de travail. Appuyez ensuite sur le bouton d'enregistrement. Vous pouvez alors enregistrer la séquence utilisée pour ouvrir les Préférences Système, sélectionner le volet de votre choix, sélectionner l'audio de votre choix, puis terminer l'enregistrement.

Vous pouvez généralement examiner les actions et les couper ou ajouter des délais si nécessaire en utilisant Automator et vous n'aurez pas besoin de savoir comment programmer les lignes et les éléments dans Applescript.

1voto

Sloneg Points 11

Les gars ! Ce script ci-dessous a été préparé par moi et il ne se soucie pas du nombre d'appareils que vous avez réellement. Il fonctionnera dans tous les cas :

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"

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X