On Mon, Oct 24, 2011 at 06:26:18AM -0700, Chris Robinson wrote:
On Monday, October 24, 2011 8:08:58 AM Andrew Eikum wrote:
On Sun, Oct 23, 2011 at 05:57:04PM -0700, Chris Robinson wrote:
A configuration option (in
winecfg/control panel) would be needed to set it into a different mode. Windows has something similar to this for its own audio device configuration in the control panel.
My reaction to this is "urrrrrrrghhhhhhh". I'd much rather tuck it away in a registry entry than put it in winecfg for everyone to mess with. I was surprised to see that option on my Win 7 VM, although the control is actually inactive.
Personally, I don't think users should be asked to manually edit the registry to enable 4-channel or 5.1 surround sound, to select 48khz playback, or to enable 24- or 32-bit output. They're not uncommon settings, so many people may want to use it, but not common enough to make them default. A control panel applet would also provide a nice place to test the separate channels to make sure they're mapping correctly.
To be frank, what I want to avoid is giving users a ton of options with which to screw up their audio config, promptly forget about changing those settings, and then having to sort out their bug reports ("Can you set this to X and that to Y and get yet another log, please?"). Tucking stuff away in the registry makes it a pain to screw up their config, which means they'll probably turn to submitting bug reports with the default config first, which is exactly what I want.
There are other problems with overriding GetMixFormat(). For example, it should really be a per-device (and therefore per-backend) setting. Can you imagine the dialog for that?
What I really want, and what I tried to do when making the drivers, is GetMixFormat() to report the format that most accurately represents the device. I want the format reported by GetMixFormat() to require as near to no resampling, no channel remapping, and no bit depth changes as possible on its path from the application to the hardware. Then IsFormatSupported() and Initialize() will deal with conversions, if need be. Unfortunately, it seems very difficult to get this information out of most of the backends, which is why we have this "10000 channels" nonsense.
I'm unsure what the best solution to this problem is. I'm open to suggestions.
Andrew