EDIT: Interestingly enough — and I did report this to Asus — this issue went away after a system reboot. The nature of the problem still implies a driver-level bug, but why a reboot would fix it is still unknown. I’m still looking to figure out if there’s a way to reproduce it consistently/reliably so that Asus can track down the source of the problem and fix it permanently.
EDIT: I should also point out that CCP of EVE Online fame confirms a bug with the “GX” feature of these cards (and it affects all OSes, not just XP). I ran into this as well since I was an EVE player at the time. The workaround for that bug is to disable the GX feature in the Asus control panel — but for the bug discussed below, there does not appear to be a workaround aside from rebooting.
About a week ago I replaced use of my crappy Realtek ALC889 (Azalia) on-board audio with an actual sound card — more specifically, the Asus Xonar DG. This card is deemed “one of the best” by the general Internet community for gaming and general audio use, plus it’s inexpensive (US$25).
It didn’t take me long to start finding bugs in its drivers.
Thankfully the issue I’m about to describe doesn’t affect most software. Most programs these days tend to use DirectSound for audio playback, while this bug purely affects Windows MME playback, and only at rates less than 44kHz.
You might be inclined to ask “What on earth uses MME these days? It dates back to Windows 3.0!” but surprisingly a large number of non-gaming applications continue to use Windows MME as a very simple way to play back .wav files or other such things. A great example is the ever-popular Windows IRC client called mIRC. But other programs such as Audacity and even Winamp (when using the Nullsoft WaveOut Output plug-in, rather than DirectSound) can use MME. Even Windows XP Control Panel applets that come with the OS use MME. My point is that MME is still used throughout many applications, thus audio card vendors need to make sure their drivers are tested properly with both MME and DirectSound.
I also imagine this only affects XP, as Windows Vista and Windows 7 both have entirely new audio layers and MME support is “emulated” where DirectSound is used natively.
The bug itself only affects playback when a frequency rate less than 44kHz (e.g. 11kHz or 22kHz) is used. Mono vs. stereo has no bearing, nor does 16-bit vs. 8-bit. The end result is audio that is played at a base frequency which is lower than what it should be; most people would describe the sound as “sad”.
It’s very easy to notice and doesn’t require a sharp ear in the least. I have mIRC configured to play a “ding” noise when someone says my nickname on IRC, using C:\WINDOWS\Media\ding.wav as the source audio, which happens to be 22kHz 16-bit stereo.
I made a Youtube video showing this exact problem so that people can hear the difference themselves:
And for those wanting to reproduce the issue, the easiest method is to use Audacity:
- Install Audacity
- Open C:\WINDOWS\Media\ding.wav
- Make sure that “MME” mode is selected, not “DirectSound”
- Play the file and listen closely
- Change from “MME” to “DirectSound”
- Play the file and notice the difference (DirectSound is correct)
I’ve mailed Asus about this problem, including a step-by-step method of reproducing it (it’s quite easy), and will post some follow-ups when they’ve gotten back to me.
The bug itself is almost certainly the result of someone’s resampling frequency table being incorrect, or if used via a formula, the formula being wrong. I imagine the fix to be fairly simple, and I sure hope Asus doesn’t give me the standard Tier 1 Technical Support run-around (“have you tried rebooting your computer”, etc.).