I've been searching for a solution to this for a LONG time. I'll share what I've gathered thus far, but please forgive the less-than-complete answer (I'll update as I find more).
What I've gathered --
HDMI and DisplayPort connections are "Hot Plug Detectable" -- whenever a device is connected with one of these, it communicates two-ways between itself and the main device. This is why Windows will juggle your display/desktops around when you connect or disconnect a monitor with one of these connection types. This does not happen with DVI connections, because Windows doesn't know when the device is turned on or turned off.
The problem with this -- each time your device turns off, Windows uninstalls it from the system. When you turn the device back on, Windows sets it up as a completely new device. I speculate this is what's causing the HDMI sound configuration to keep resetting to Stereo -- the sound device/configuration for my AMD HDMI sound output is getting "uninstalled" whenever I turn my monitor off (or reboot, sleep, etc.), and then gets reinstalled as a new device when I turn it back on again, ...resetting the speaker configuration to Windows' default of Stereo.
The issue is hardware polling. Switching desktop cloning/extending
modes in windows is not the solution.
I use a single 27" with Displayport, when I power off my screen,
windows uninstalls my screen and resets the running screen resolution
to 800x600. This means when I power on my screen, all windows/programs
left open are resized to 800x600 and pushed into the top-left corner.
Thankfully win7 remembers my icon positions when the desktop returns
to 2560x1440 else I would have put my foot through the screen by now.
Displayport is hotswappable thus hardaware polling monitors the
connected screens state, if you disconnect, windows simply removes
that display, in single monitor mode, this equates to having no screen
at all and windows defaults to the generic 800x600 for compatibility
reasons.
While is is working "as intened" for hotplug screens, the side effect
is that it completely messes with multi monitor set-ups as the OP
explained. It also messes with single display solutions, and to date I
can't find any damm way to disable this other than hard wiring out a
pin on my DP cable to disable the hardware polling.
I can't switch from DP. I need the DP colour bandwidth capabilities
for my panel. AMD and Microsoft pretend this is not an issue and have
nothing to say for themselves, even though either of them could
release a fix/option to disable this behavoiur.
(Source: http://www.overclock.net/t/1235582/dealing-with-displayport-hdmi-autodetect#post_18114801 )
Possible solution? Block pin 19 ("Hot Plug Detect" pin) on your HDMI cable. This will block the on/off detection done by Windows, so the device will appear to stay connected and thus not get uninstalled (taking your settings with it).
This is a double-edged sword, however, because Windows will not be able to detect when the device is connected -- not a problem if you keep your computer on and running, but when you reboot your computer, Windows won't "see" the HDMI/DisplayPort device and thus won't use it.
Here's the source for the pin 19 solution:
SOLUTION: I had the same issue and solved it by cutting the "Hot Plug
Detect" pin in my HDMI cable.
Setup: HTPC (and other devices) to receiver to TV all with HDMI
cabling.
What I did: Splice the wire and cut the wire associated with the "Hot
Plug Detect" pin which is pin 19 of the HDMI connector. It was too
hard to remove this pin from such a small connector so I just spiced
the wire about an inch and used a continuity tester to determine the
correct wire and cut it. For the cable I modified the wire associated
with Pin 19, "Hot Plug Detect" was dark purple. (This is the cable
between my computer and the receiver.)
Result: Everything works great, the computer detects the tv/monitor
through the EDID from the DDC, but the computer DOES NOT detect when
my tv/monitor has been turned on/off. The computer acts as though the
tv/monitor is always turned on. No resolution re-sizing, no moving
windows, no icons changing location, music plays without the tv turned
on, etc. The computer simply does not detect the power-on/off of the
monitor.
Commentary: While I agree cable/adapter mutilation should not be
required, unfortunately it is. Alternatively you can buy a $40-$80
connector box that essentially does the same thing and manages the
EDID as well. In my case I figured having a cable with this wire cut
was worth it because I will always have a use for it, and my HDMI
cables only cost $4 as opposed to $40. If you really want I'm sure you
could put an inline switch rather than just cutting the wire.
Summary: MS clearly has no intention of fixing this "feature".
Modifying cables or connectors to remove the "Hot Plug Detect"
connection is a very good and easy solution. This works for VGA, DVI,
and HDMI connections and once done your computer will always assume
your tv/monitor is turned on. This is the way to disable display
auto-detection.
(Source: http://social.technet.microsoft.com/Forums/windows/en-US/8a9b5aa7-fe33-4e6d-b39b-8ac80a21fdc2/disable-monitor-off-detection-how#71b98215-6f2a-4603-8c97-68bfdbc8fc3b )
Another possible solution I've tried is locking the specific registry key that holds Windows' speaker configuration. This stops even Windows from changing/overwriting it, preventing Windows from resetting to a default "Stereo" configuration.
The problem with this, however, is the same problem as above -- because Windows is uninstalling and reinstalling the monitor (and sound device) each time its turned off/on, it doesn't matter that I lock the registry key for it, because the key is "outdated"/void/unused the next time the monitor is off/on'ed. Each time it's turned back on, Windows creates a completely new device ID for it, along with a new sound configuration key/settings in the registry.
Another solution I've contemplated is automating the setting of the correct speaker setup in Windows sound configuration with a custom program I'm writing myself. I've started writing an AutoHotKey script that, when run, will essentially do the work of going into Windows sound config, setting a 7.1 speaker setup, and then applying and saving the config. Ideally, this script will run GUI-less without needing to visually open the Sound control panel and config windows. It'll basically pull the behind-the-scenes "puppet strings" to accomplish this non-visually so it wouldn't interfere with your work and you wouldn't have to see it happening.
This program would either monitor the current sound device/config in Windows and detect when its been set to "Stereo", or it could just initiate a 7.1-speaker-setting whenever the computer restarts, resumes from sleep, or has a monitor turned on.
And that's the gist of what I've got so far.
Can you provide more info on the sound card you are using? Does it have its own application in which you can configure the settings (e.g., Creative Entertainment Console)? Often times, such applications can override Windows' settings. – P Fitz – 2014-01-01T20:11:23.113
Onboard sound that ships with the motherboard - a Gigabyte H67N-USB3-B3 mini-ITX motherboard, paired with the i3-2100. I deliberately did not install any additional applications. – vnangia – 2014-01-02T00:46:05.530
Which Windows setting is it that you have to go in and change each time? Is it the speaker configuration?
If so, shouldn't you be sending a digital PCM signal to the receiver so that the receiver (not Windows) does the multi-channel decoding? If Windows is outputting a digital signal (via HDMI, coax, or optical cable), then the speaker configuration option isn't even available. – P Fitz – 2014-01-02T16:29:21.603
Sorry, I'm confused. That's EXACTLY what I want it to do: stay in PCM mode and let the receiver do the decoding. However, when using the HDMI out titled "Intel Display Audio", the speaker configuration option exists and keeps reverting to stereo. I want to prevent that from happening. How do I prevent that from happening? – vnangia – 2014-01-02T20:06:57.610
Try this: bring up the list of playback devices, right click on Intel Display Audio" and go into the properties of that device.
Go to the "Advanced" tab, click the format drop down menu, and see if there is a selection for digital output. If there is, the item will say something like "Digital output" or "Dolby Digital" instead of a bit/sample rate.
If there isn't such an item in that menu search the other tabs in the properties menu for that device for a digital output or PCM option. You may end up having to install the audio drivers to access all of the features of that device. – P Fitz – 2014-01-02T21:07:51.117
No, no such options. There doesn't appear to be a newer/later driver than the existing one. The motherboard manufacturer doesn't ship anything else, and Intel doesn't seem to have anything either.
Is there really no way to just remove the speaker configurations other than my preferred 5.1 setup? Is there no way, short of buying a HDMI detective to have Windows retain the audio setup with the receiver off? – vnangia – 2014-01-04T03:11:36.580
It looks like you aren't the only one to experience this problem. It is discussed here on the Intel Support Community: https://communities.intel.com/message/161865
Sounds like you're going to have to get a separate sound card to avoid the problem.
Perhaps you could try a hardware-direct output method. I don't think Intel Display Audio supports ASIO output but you could try WASAPI or some other Kernel Streaming method to circumvent Windows' output methods. AC3 Filter offers these (and a ton of other) output methods. Here's a link: http://www.ac3filter.net/. Do let me know if and how you end up fixing this.
PS - I hadn't heard of HDMI Detective before but I looked it up and that does look like a handy gadget.
So it doesn't work. It appears very simply to be an issue with Windows refusing to retain the speaker configuration, regardless of what is generating the sound. Is there any way to manually edit a file or the registry that lists the options to eliminate the other options? – vnangia – 2014-01-05T03:06:45.743