Whatever happened to Wave Out Mix?
The Intertubes are all atwitter with reports that Dell and other OEMs colluded with the RIAA to disable the Wave Out Mix option on new laptops.
Wow, what a tempest in a teapot. I just LOVE watching conspiracy theories as the echo chamber does it’s magic.
And of course it’s almost certainly hogwash (I don’t know for sure, but I do know that some of the rumors are totally stupid).
First off, what is Wave Out Mix? It’s an option that some audio manufacturers added to their audio hardware (Creative calls it “What U Hear”). Typically the Wave Out Mix is implemented by connecting the analog output from the DAC (Digital-to-Audio Converter) to a specific input on the ADC (Analog-to-Digital Converter) which is labeled as “Wave Out Mix”.
If you record on the Wave Out Mix input, you will capture the samples that are being played via Wave Out.
In Windows Vista, by default we only enable microphone, line in and digital inputs to the audio hardware (the theory being that users typically only want to be able to listen to those inputs). If the audio solution offers other inputs, they’re still there but we bury them somewhat.
You can find those additional inputs in mmsys if you start the sound control panel and go to the “Recording” tab. If you right click and select “Show Disabled Devices” you can enable those alternate inputs.
In addition, these days many OEMs don’t bother adding the Wave Out Mix support. It costs slightly more to order chips with Wave Out Mix support than it does to order chips without the functionality, and OEMs are incredibly cost conscious. The other reason is that for those OEMs that implemented the Wave Out Mix with an analog tap, you can achieve almost the same results with a $2.50 analog cable run between the output and the line in input of the machine.
Part of the reason that I know that this is just a conspiracy theory running rampant is that Windows Vista built the support for the Wave Out Mix input directly into the operating system. If you pass the AUDCLNT_STREAMFLAGS_LOOPBACK flag to the IAudioClient::Initialize method, then the audio system will initialize the engine in loopback mode. You can start capturing data off that IAudioClient object and you’ll get the post-mix output for the endpoint.
The loopback support was designed primarily for use by AEC functionality (which needs to be able to know what samples are being played), but it also allows you to perform essentially the same functionality as the Wave Out Mix hardware used to do.
If you want to play with the loopback functionality, the WinAudio SDK sample application allows you to capture using the loopback functionality.
Comments
Anonymous
July 11, 2008
PingBack from http://blog.a-foton.ru/2008/07/whatever-happened-to-wave-out-mix/Anonymous
July 11, 2008
I had to look it up: AEC => Acoustic Echo CancellationAnonymous
July 11, 2008
Does WindowsXP have built in support for Wave Out Mix like Vista does?Anonymous
July 13, 2008
"It costs slightly more to order chips with Wave Out Mix support than it does to order chips without the functionality, and OEMs are incredibly cost conscious." That's all well and good, but it doesn't explain why "upgrading" the driver on my existing Dell audio removed the Wave Out Mix slider. I had to dig for an old version of the driver to re-enable it. It certainly cost the driver manufacturer to release a new driver that removed this support. So why bother?Anonymous
July 13, 2008
Rafael, no, that's a vista feature. daves561: I described why it was hidden in the article. In Vista, you can render to and capture from things called "endpoints" which roughly correspond to the input and output jacks on the PC. In Vista we create endpoints for internal connections like Wave Out Mix and CD Input, but we mark them as disabled. We did this because our research showed that their presence dramatically increased user confusion when asked to perform tasks like selecting an input device.Anonymous
July 13, 2008
The comment has been removedAnonymous
July 14, 2008
I dont believe it... its a conspiracy... you're one of "them" !!!! Just kidding. Great article. Well done for countering uninformed FUD with a concise technical article. JamesAnonymous
July 14, 2008
The comment has been removedAnonymous
July 14, 2008
From http://msdn.microsoft.com/en-us/library/aa363088(VS.85).aspx "AUDCLNT_STREAMFLAGS_LOOPBACK The audio stream will operate in loopback mode. For more information, see ." For more information i should see...what exactly? The SDK docs have been censored? Microsoft and RIAA together? The conspiracy is deeper than we thought!Anonymous
July 14, 2008
The comment has been removedAnonymous
July 14, 2008
Thanks for your comments. I'm done talking to Creative. It took them over 6 years to write a driver that would work with two processors. And they were the last vendor to release a needed driver for Vista when I installed it at RTM. I'm shopping for a new solution... You were totally correct that I have a Realtek HDAudio device in my computer. And it doesn't support Wave Out recording in XP either. I have a backup computer that does have an AC97 device and it does support recording from Wave Out.Anonymous
July 14, 2008
Herb: Sorry about that. As I said in the post, a lot of audio manufacturers are pulling this support for a number of reasons, the primary one being cost.Anonymous
July 15, 2008
The comment has been removedAnonymous
July 21, 2008
And people wonder why they say Macs are more user friendly for recording/video. It absolutely kills me that I have a $4k computer and I can't simply record the audio from a streaming youtube video.Anonymous
July 23, 2008
The comment has been removedAnonymous
July 23, 2008
Joshua: Check out http://msdn.microsoft.com/en-us/library/ms679150(VS.85).aspx - PKEY_AudioEndpoint_FormFactor. That's what we use when calculating the mixer API values, it's has a slightly finer granularity of values than the mixer API has.Anonymous
July 23, 2008
The comment has been removedAnonymous
July 24, 2008
Joshua, unfortunately we don't have a way for 3rd parties to change the default audio device, that functionality is a user choice, not an application choice. As Raymond Chen says: "What if two applications wanted to do that?". Do you have a way of asking the 3rd party vendor to allow their clients to set the input device? You can launch mmsys.cpl with "control mmsys.cpl,,2" to let the set the default device (it's not a great solution but it's a solution).