This method works for me without having to close MM but it doesn't work if MM is minimized.
You can change which output is selected by changing the number of {down} emulations are performed at the end of the macro. Remove all of them to select the default output. This works almost instantly for me even if a song is playing.
<?xml version="1.0" encoding="UTF-8" ?>
<EventGhost Version="1640">
<Macro Name="Find Window: MediaMonkey.exe" Expanded="True">
<Event Name="USB_UIRT.Mce.Blue" />
<Action>
Window.FindWindow(u'MediaMonkey.exe', u'MediaMonkey', u'TFMainWindow', u'', u'TMMPlayerSkinEngine', 1, False, 0.0, 0)
</Action>
<Action>
Window.SendMessage(517, 0, 0, 1)
</Action>
<Action>
Window.SendKeys(u'{End}', False)
</Action>
<Action>
Window.SendKeys(u'{Up}', False)
</Action>
<Action>
Window.SendKeys(u'{Up}', False)
</Action>
<Action>
Window.SendKeys(u'{Enter}', False)
</Action>
<Action>
EventGhost.Wait(0.29999999999999999)
</Action>
<Action>
Window.FindWindow(u'MediaMonkey.exe', u'MediaMonkey DirectSound Output plug-in', u'TFormPlus', u'', u'TComboBoxPlus', 1, False, 0.0, 2)
</Action>
<Action>
Window.SendKeys(u'{Home}', False)
</Action>
<Action>
Window.SendKeys(u'{Down}', False)
</Action>
<Action>
Window.SendKeys(u'{Enter}', False)
</Action>
</Macro>
</EventGhost>