Männig

Rascher Wechsel der Ton-Einstellungen auf dem Mac

Auf iFun bin ich vor ein paar Tagen über die Vorstellung des kleinen Tools Ears von Tyler Hall gestolpert. Der Entwickler bezeichnet die Mac-App als Instant Audio Switcher, also als ein Programm, die es erlaubt, schnell zwischen verschiedenen Ton-Ein- und -Ausgabegeräten, die mit einem Mac verbunden sind, hin und her zu schalten. Ears kann mit einer frei wählbaren Tastenkombination aufgerufen werden und erlaubt es dann, durch Tippen einer Zahl und eines Buchstaben einen der jeweils verfügbaren Lautsprecher und eines der Mikrofone zu wählen, die mit dem Mac verbunden oder bereits eingebaut sind. Sehr praktisch, und genau das, was man schon oft vermisst hat, um beispielsweise schnell auf ein (anderes) Headset umzuschalten, wenn ein Anruf hereinkommt. Und billig ist es obendrein: Schon für 2,37 US-Dollar lässt sich die nag screen der App entfernen, die bei jedem Programmstart erscheint und die den Arbeitsablauf doch erheblich stört.

Aufgrund seiner überschaubaren Größe belastet Ears den Arbeitsspeicher des Mac mit 69,1 MB nur relativ wenig. Aber könnte diese Aufgabe nicht auch mit noch einfacheren Mitteln gelöst werden, mit Bordmitteln von Mac OS gar? Klar, kann sie, sofern man sich vor ein paar kleinen Brocken AppleScript nicht scheut. Wie es geht, zeige ich hier anhand von Beispielen der drei Ton-Ein- und -Ausgabegeräte, mit denen ich wechselweise arbeite:

  • der Plantronics BT600, ein Bluetooth-Stecker von Poly, der für eine weit stabilere Verbindung zum exzellenten Telefonheadset Voyager 5200 sorgt, als es das im Mac verbaute Bluetooth-Modul kann
  • der Soundcore Life Q20, ein preiswerter Bügelkopfhörer aus dem Hause Anker
  • das interne Mikrofon und der interne Lautsprecher meines MacBook Pro

Jedes Script ist so angelegt, dass es zu einer bestimmten Kombination von Eingabegerät (Mikrofon) und Ausgabegerät (Kopfhörer, Lautsprecher) verbindet, gleich welche Verbindung zu diesem Zeitpunkt gerade besteht. Das folgende Script ruft die Verbindung zum BT600 auf, indem es die Systemeinstellungen aktiviert und dort in den Ton-Einstellungen zunächst das entsprechende Gerät als Eingabegerät (letztes Tab) und dann als Ausgabegerät (mittleres Tab) auswählt. Ist das BT600 nicht am Mac eingesteckt, dann informiert das Script mit einem Popup Gerät nicht verbunden! über diesen Fehler. Mit der letzten Zeile des Scripts wird das Systemeinstellungen-Fenster wieder geschlossen.

tell application "System Preferences" to activate
tell application "System Preferences"
	reveal anchor "input" 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
		try
			select (row 1 where value of text field 1 is "Plantronics BT600")
		on error
			display alert "Gerät nicht verbunden!"
			return
		end try
	end tell
end tell
tell application "System Preferences" to activate
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 "Plantronics BT600")
	end tell
end tell
quit application "System Preferences"

Die Anpassung des Scripts an eigene Geräte ist einfach: Die Zeichenfolge Plantronics BT600 ersetzt man einfach durch die Namen des gewünschten Eingabegeräts (oben im Script) und Ausgabegeräts (unten im Script), exakt so geschrieben, wie sie in den Ton-Systemeinstellungen abzulesen sind. Eine kleine zusätzliche Herausforderung stellt sich beim Verbindungsscript für den Soundcore-Kopfhörer: Dieser stellt nämlich beim Einschalten von sich aus keine dauerhafte Bluetooth-Verbindung zum Mac her. Aber kein Problem, auch das lässt sich per AppleScript automatisieren:

tell application "System Events" to tell process "SystemUIServer"
	set bt to (first menu bar item whose description is "bluetooth") of menu bar 1
	click bt
	tell (first menu item whose title is "Soundcore Life Q20") of menu of bt
		click
		tell menu 1
			if exists menu item "Verbinden" then
				click menu item "Verbinden"
			else
				click bt
			end if
		end tell
	end tell
end tell
delay 2
tell application "System Preferences" to activate
tell application "System Preferences"
	reveal anchor "input" 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 "Soundcore Life Q20")
	end tell
end tell
tell application "System Preferences" to activate
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 "Soundcore Life Q20")
	end tell
end tell
quit application "System Preferences"

Hier wurde also dem bereits bekannten Script im oberen Bereich noch die Herstellung der Bluetooth-Verbindung hinzugefügt. Da der Verbindungsaufbau einen kleinen Moment dauert, ist nach diesem Schritt mit dem Befehl delay 2 eine Pause von 2 Sekunden eingefügt. Je nach Gerät lässt sich dieser Wert natürlich variieren. Die Abfrage try aus dem ersten Script, die überprüft, ob das Gerät überhaupt verbunden ist, kann bei dieser Variante natürlich entfallen. Und schließlich noch das schlichte Script, das die im MacBook fest verbauten Ein- und Ausgabegeräte wieder aktiviert:

tell application "System Preferences" to activate
tell application "System Preferences"
	reveal anchor "input" 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 "Internes Mikrofon")
	end tell
end tell
tell application "System Preferences" to activate
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 "Interne Lautsprecher")
	end tell
end tell
quit application "System Preferences"

Die AppleScripts lassen sich einfach im Mac-OS-eigenen Scripteditor, der unter /Programme/Dienstprogramme zu finden ist, anpassen und testen. Danach legt man sie an einem sicheren Ort ab, wobei ~/Library/Scripts sicherlich eine gute Wahl ist. Von hier aus lassen sich lassen sich die Scripts schnell und einfach mit einem Tool wie – ganz nach Geschmack – LaunchBar, Alfred oder Keyboard Maestro aufrufen. Hat man sich bislang noch gescheut, sich das Leben mit einem dieser Helferlein einfacher zu machen, dann lässt sich – wiederum mit Bordmitteln, nämlich mit dem Automator – jedem Script ein Tastenkürzel zuordnen, mit dem es einfach aufgerufen werden kann.

Nun lassen sich also die Toneinstellungen des Mac im Handumdrehen ändern – ohne dass ein ständig mitlaufendes Programm den Arbeitsspeicher füllt und ein weiteres App-Icon die Menüzeile immer voller werden lässt. Viel Spaß beim Nachbasteln! Zu kompliziert? Auch kein Problem, denn dann gibt es ja immer noch das preiswerte Ears, das wirklich zu empfehlen ist.


Headerbild von Tomasz Gawłowski auf Unsplash