TIL: macOS Sound-Ausgabe per Shortcut umschalten

Ich habe mir letztens ein Logitech Headset für besseren Klang in Videokonferenzen gekauft. Dieses hat ein USB-Sound-Device im Lieferumfang, welches jeweils einen zusätzlichen Ein- und Ausgabekanal zur Verfügung stellt. Möchte man zwischen dem eingebauten Lautsprecher im Mac und dem USB-Sound-Device umschalten, erfordert das für Ein- und Ausgabe-Device je zwei Klicks auf das Sound-Icon in der Menu-Bar.

Da ich dieses Umschalten mehrmals pro Tag vornehme und den Weg mit der Maus als unnötig empfinde, habe ich mir einen Tastatur-Shortcut dafür gebaut.

Etwas Herumsuchen im Internet führte mich zu switchaudio-osx: Hier wird das Umschalten von Audio-Devices über die Command Line ermöglicht. switchaudio-osx lässt sich einfach per Homebrew installieren:

1
brew install switchaudio-osx

Sobald switchaudio-osx installiert ist, wird zuerst eine Inventur der verfügbaren Devices gemacht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
% SwitchAudioSource -f cli -a
Built-in Microphone,input,58,AppleHDAEngineInput:1F,3,0,1,0:1
PRO X,input,68,AppleUSBAudioEngine:Logitech:PRO X:000000000000:1
Reincubate,input,78,CamoAudioDevice_UID
Aux,input,87,UltraschallHubDevice:0
Skype Microphone,input,92,UltraschallHubDevice:1
Skype Speakers,input,97,UltraschallHubDevice:2
Stream,input,102,UltraschallHubDevice:3
AGG,input,72,~:AMS2_Aggregate:0
Built-in Output,output,48,AppleHDAEngineOutput:1F,3,0,1,1:0
PRO X,output,64,AppleUSBAudioEngine:Logitech:PRO X:000000000000:2
Reincubate,output,78,CamoAudioDevice_UID
Aux,output,87,UltraschallHubDevice:0
Skype Microphone,output,92,UltraschallHubDevice:1
Skype Speakers,output,97,UltraschallHubDevice:2
Stream,output,102,UltraschallHubDevice:3
AGG,output,72,~:AMS2_Aggregate:0

Die Ausgabe mit dem Format CLI zeigt die Namen, IDs und UIDs der Devices an. Sobald man sich den passenden Namen bzw. die passende ID bzw. UID herausgesucht hat, kann man schon zwischen zwei Devices umschalten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Umschalten auf eingebauten Lautsprecher

% SwitchAudioSource -i 48 # ID=48: eingebauter Lautsprecher im iMac, s. o.
output audio device set to "Device with ID: 48"
% SwitchAudioSource -c -f cli # aktuell ausgewähltes Device anzeigen
Built-in Output,output,48,AppleHDAEngineOutput:1F,3,0,1,1:0

# Umschalten auf das Headset:

% SwitchAudioSource -u 'AppleUSBAudioEngine:Logitech:PRO X:000000000000:2'
output audio device set to "Device with UID: AppleUSBAudioEngine:Logitech:PRO X:000000000000:2"
% SwitchAudioSource -c -f cli
PRO X,output,64,AppleUSBAudioEngine:Logitech:PRO X:000000000000:2

Damit ist das Ziel schon fast erreicht – es fehlt nur noch der globale Tastatur-Shortcut. Automator to the rescue!

Zuerst wird ein kleines Wrapper-Skript gebaut, welche Ein- und Ausgabe setzt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

set -o errexit
set -o nounset

DEVICE_OUTPUT=${1:-}
DEVICE_INPUT=${2:-}

[[ -z "$DEVICE_OUTPUT" ]] && { echo "Usage: $(basename $0) <OUTPUT DEVICE NAME> <INPUT DEVICE NAME>" ; exit 1 ; }
[[ -z "$DEVICE_INPUT" ]] && { echo "Usage: $(basename $0) <OUTPUT DEVICE NAME> <INPUT DEVICE NAME>" ; exit 1 ; }

# todo: check if $DEVICE_OUTPUT and $DEVICE_INPUT are actually existing devices

/usr/local/bin/SwitchAudioSource -t output -s "$DEVICE_OUTPUT"
/usr/local/bin/SwitchAudioSource -t input -s "$DEVICE_INPUT"

Die Namen des Aus- und Eingabe-Devices werden als Argumente übergeben.

In Automator kann jetzt für jede gewünschte Ein- und Ausgabe-Option eine Quick Action erstellt werden. Diese hat nicht mehr zu tun, als das jeweilige Skript mit den passenden Argumenten einmal zu starten:

Automator Quick-Action
◎ Automator Quick-Action zum Umschalten der Sound-Devices

Sobald die Actions gespeichert wurden, stehen sie als Ziel für einen systemweiten Shortcut zur Verfügung: In der Keyboard-Preference Pane findet man die beiden Actions unter „Services“ und kann einfach ein Tastaturkürzel zuweisen. Das war’s auch schon.

Shortcuts
◎ Konfiguration der Tastatur-Shortcuts

Alternativ lassen sich die Skripte übrigens auch schnell per Launchbar aufrufen.