Why doesn't Disney's "Adventures in Typing with Timon and Pumba" work on my PC?
Sorry for the sort-of dorky title, it's for google.
Today, Sharron finally finished the Aventures in Typing program. Her 3/4 class uses it to teach typing (yeah, they teach typing to 3rd graders these days). It's actually a pretty cool typing program. At the end of the program, Timon and Pumba play a little song, and the entire class clusters around the person who just passed the program to cheer them on. Sharron's been working on it really hard, and it's awesome that she's finally passed it.
We're actually the person who found the program for the class, Daniel used it to learn how to type back when he was in 3rd grade. To give Sharron a headstart, we installed it onto her machine.
When she started the program, she got an error "Assert Failed: NumAudioChannels == 2/c:\src\DivCore\PlatformWin95\SsoundSystem.cpp line 119 ". I spent a huge amount of time trying to figure it out (now it can be found on the web but at the time it wasn't available on google).
The reason that this fails is because there was a winmodem installed on my daughters machine with a 3rd party driver for the modem installed.
The way that winmodems work is that they effectively function as PCM audio output devices - the modem driver on the PC generates the modulation tones that will be emitted on the phone line, and submits it as a PCM stream to the waveform audio output device on the modem.
Some modem manufactures hook their modem devices up as waveform devices on the PC (the built-in driver for winmodems doesn't), this makes their drivers easier to write, but it can cause problems.
You see there are a bunch of applications out there that write to wave channel 0 and assume that it's always the default audio device on the computer. Since most computers only have one sound card, that can be a reasonable expectation, but if you're running on a machine with one of these winmodem drivers installed, there are TWO audio devices. If the winmodem gets wave device 0, then it will be the device that is used as the "default" device for these apps.
Timon and Pumba is one of those applications that assumes that device 0 is the default audio device - they start up and find the modem and check to see that its a stereo device. Since winmodems are mono, the application fails.
For Timon and Pumba, my solution was simply to remove the OEM driver for the winmodem - that removed the waveform driver, windows inbox driver picked up the modem and it appears to work ok (of course we don't actually use the modem since we have broadband at home, but...). I've also read that disabling the waveform device will also fix the problem.
If you're writing a waveform based application, and you want the default audio output device, you should use the special wave device WAVE_MAPPER instead of 0 to get the default device.
Btw, in Windows 2003, we changed the audio device mapping code so that the default audio device always appears as waveform device 0, just to solve this problem. It doesn't help Windows XP customers, but in future versions this shouldn't be a problem.