Audible fun with Alfred
I’ve been looking more and more at using AppleScripts in Alfred, my launcher/productivity app for Mac OS X. Today’s snippet is about switching the active audio output device; I wanted this for work, where I switch between external speakers and some headphones plugged into the front 3.5mm jack.
This script is modified from a post on SuperUser, where it started life as a snippet to toggle between two fixed devices. I wanted a little more flexibility, so I decided to use Alfred’s script parameter to take a keyword defining the device to switch to. I have this script bound to the audio
keyword in Alfred, so I can type (for example) audio speakers
and have music start playing through my line-out speakers. Without further ado:
property speakers : "Line Out"
property headset : "Headphones"
property optical : "Digital Out"
on alfred_script(q)
if q is equal to "speakers" then set desired_output to speakers
if q is equal to "headset" then set desired_output to headset
if q is equal to "optical" then set desired_output to optical
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 1
click radio 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 (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
end alfred_script
One of the current downsides to the script is that it can’t operate in the background; much like my previous script to make a Genius playlist, this brings a window to the foreground (at least briefly). As such, you should give it two or three seconds to run and dismiss the window again before you go back to what you were doing. Dedicated programs, such as Rogue Amoeba’s Sound Source, have fewer limitations.