Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I've got speakers (audio in) and headphones (USB headset with it's own soundcard) connected to my desktop computer. Under Windows 7, I can right-click the Audio Mixer and select Playback Devices and toggle between my these devices.

Is there an easier way, perhaps a keyboard shortcut, that would make it easier to toggle? I'm working in an shared space were sometimes I want headphones to avoid annoying other people, but at other times speakers are OK. I want to be able to toggle quickly. In an ideal world, the solution to my question would work in Vista too.

share|improve this question

5 Answers 5

up vote 18 down vote accepted

The solution to all your nagging Windows automation problems: AutoIt!

Put this AutoIt and compile it

;-----Configuration-----
;The title of the sound config window.
Dim $ConfigWindowTitle = "Sound"
;-----End of configuration----

Dim $ItemNumber = 1
If $CmdLine[0] >= 1 Then ;If we have a parameter...
    $ItemNumber = $CmdLine[1] ;...we should press the button the specified number of times.
EndIf

Run("control mmsys.cpl") ;Run the sound control applet and hide it.

WinWaitActive($ConfigWindowTitle) ;Wait for it to be active before sending keystrokes.

Send("{TAB}{TAB}{TAB}{TAB}") ;Put the focus on the list

For $i = 1 to $ItemNumber Step 1
    Send("{DOWN}")
Next

Send("!s") ;Press Alt + S to set the selected device as the default.
WinClose($ConfigWindowTitle)

Now create a shortcut, and in the Target put the path to the compiled executable. For an argument, put the number of the sound device in the list that you want to switch to. (to switch to the top item in the list, put 1, the second item in the list, put 2, etc). If you want a keyboard shortcut, use the Shortcut Key field in the shortcut's properties window.

I'd been looking for something to do what you wanted to do, and found that there's no programmatic way that you can switch audio devices in Vista/7. It's just not something that Microsoft decided that programmers need to do, so I make this script to automate the process. It's not the best since it pops up the window in order to change the device (necessary), but it makes it possible to create shortcuts to change the output device for your sound.

share|improve this answer
1  
This is perhaps the most useful answer I've yet to find on this whole site! Thanks again for this.... –  JL. Feb 9 '10 at 16:24
    
Very awesome, works great. –  WerkkreW Feb 15 '10 at 9:37
    
Works nicely with Launchy too, Thanks!! –  Tim Santeford Sep 6 '10 at 7:18

Default Audio Changer is currently the best solution, in my opinion.

It uses undocumented system calls instead of simulating keyboard presses, which means you can use it in fullscreen applications without worry.

share|improve this answer
    
Great idea, but not only did it not work, now my headset isn't detected at all when plugged in. :( –  Nick Feb 3 '12 at 20:29
2  
Works perfectly, thanks! –  Codex73 Feb 17 '12 at 2:13
2  
Highly recommended! 10x better than a AutoIt script. Should be the accepted answer, really. –  Otiel Jun 27 '12 at 18:16
2  
Setup files are here: sourceforge.net/projects/defaultaudiocha/files Wow this is probably the cleanest playback devices switch solution I've ever seen!! +1 –  Geo Feb 19 '13 at 17:22

@Dan Walker Nice solution, but not perfect ;)

This script uses the existence of a file to actually perform a toggle, so you can use the same shortcut to switch between playback devices. It's just a simple edit:

;-----Configuration-----
;The title of the sound config window.
Dim $ConfigWindowTitle = "Sound"
;-----End of configuration----

Dim $ItemNumber = 1 ; The first itme in the audio list

If FileExists ("a") Then; Use the existence of a file to know if we should toggle
    FileDelete("a")
    $ItemNumber = 3 ; The audio playback device you want to toggle to
Else
    FileOpen("a", 1)
    FileClose("a")
EndIf

Run("control mmsys.cpl") ;Run the sound control applet and hide it.

WinWaitActive($ConfigWindowTitle) ;Wait for it to be active before sending keystrokes.

Send("{TAB}{TAB}{TAB}{TAB}") ;Put the focus on the list

For $i = 1 to $ItemNumber Step 1
    Send("{DOWN}")
Next

Send("!s") ;Press Alt + S to set the selected device as the default.
WinClose($ConfigWindowTitle)
share|improve this answer
    
Nice, I like the toggling –  Chaulky Mar 22 '11 at 2:15

fakt's solution works like a charm. Here a little script for autohotkey that selects the first audio device as default when you press "F4" and the second when pressing "F3". This version works with all Windows Versions. Tested using Win 7 64.

F3::
Run, mmsys.cpl
WinWaitActive,Sound
ControlSend,SysListView321,{Down}
ControlSend,SysListView321,{Down}
Sleep, 50
ControlClick,Button2
ControlClick,OK
return

F4::
Run, mmsys.cpl
WinWaitActive,Sound
ControlSend,SysListView321,{Down}
Sleep, 50
ControlClick,Button2
ControlClick,OK
return
share|improve this answer

Googled this for a while and the only thing that did the trick for me is a script from AutoHotKey, the only wish I have is to have this done in the background.. Here is the script:

Run, mmsys.cpl
WinWait,Sound
ControlSend,SysListView321,{Down}
ControlClick,&Set Default
ControlClick,OK

You can change it to meet your needs

share|improve this answer
    
This worked for me, but I had to use SendInput {Down} instead of ControlSend,SysListView321,{Down}. I also had to change the number of {Downs} to match my audio devices. –  Iain Oct 2 '11 at 19:37

protected by Ivo Flipse Jan 18 '11 at 0:18

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.