Larry Osterman's WebLog

Confessions of an Old Fogey
Blog - Title

Whatever happened to Wave Out Mix?

Whatever happened to Wave Out Mix?

  • Comments 18

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.

  • 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.

  • Wow, Larry, thanks for the fast response!  One more question: is it possible for an application to change the default input audio endpoint?  I basically have a voice application and I want it to warn if you have something other than a microphone selected as the default input endpoint and offer a little 'fix' button that, when clicked, changes the default input endpoint to their microphone.  This works fine under XP with the mixerXxx functions, but I haven't found a way to make it work with Vista.

    We offer a dropdown box to allow the user to select which device they want to use for input, however, it's part of a closed-source third-party library and doesn't seem to cope well with Vista.  Therefore, I'm going to lock it to using the default endpoint and ideally have a way to change the default endpoint.

  • 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).

Page 2 of 2 (18 items) 12