[wdmaudiodev] Re: AEC in Vista

  • From: Shuba Iyer <Shuba.Iyer@xxxxxxxxxxxxx>
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 3 Oct 2006 18:31:49 -0700

In Vista, the new core audio API is called "Windows audio session API 
(WASAPI)". WASAPI allows users to capture the speaker render signal after the 
mixer. See 
 for more details about loopback capture. Note the AUDCLNT_STREAMFLAGS_LOOPBACK 
stream flag in the Remarks section.

When the DMO is in source mode, we don't know the signal that is rendered by 
the AEC application. However we can get the signal after the audio mixer. So 
not only is the far-end signal cancelled, but also the system sounds or other 
signal played by other applications through the same audio device are also 
cancelled (per-system echo cancellation).

>> So, am I, then, expected to add some kind of a "tee" to my application in 
>> order to route the final output signal back to the DMO's speaker input?
Essentially that is what you would do. If you want the per-stream AEC, i.e. 
cancellation of only the far-end signal rendered by the AEC application you 
will have to use the filter mode DMO. In this case you will loopback just the 
far-end signal to the DMO input for processing. All other sounds rendered by 
other applications will not be cancelled and will be heard at the far-end.

Shuba Iyer
Microsoft Corporation

From: wdmaudiodev-bounce@xxxxxxxxxxxxx 
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Tim Roberts
Sent: Tuesday, October 03, 2006 1:37 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: AEC in Vista

Shuba Iyer wrote:
The Voice capture DMO has two different working modes, "filter mode" and 
"source mode". In filter mode, the DMO works like a filter. It takes microphone 
(and speaker if AEC is enabled) input signals and produces clean output. 
Application is responsible for capturing microphone and/or speaker signal and 
sending them to the DMO. For per-stream echo cancellation you want to use 
filter mode.

So, am I, then, expected to add some kind of a "tee" to my application in order 
to route the final output signal back to the DMO's speaker input?  And this 
still doesn't address this quote from the DMO documentation:
If AEC is enabled, the DMO can capture speaker streams only after the audio 
mixer.  This means that all system sounds are canceled (per-system 
cancellation) as well as the far-end voice.
My application can't gain access to the speaker streams after the audio mixer.  
How is the DMO doing that?

AEC and microphone array processing in Vista are application graph features. So 
it is up to the application to use the feature or not.

Well, that's certainly one position, but it is not unreasonable for a user to 
want ALL of their microphone input (including Sound Recorder) passed through 
AEC. That goal has now been made rather difficult to achieve.


Tim Roberts, timr@xxxxxxxxx<mailto:timr@xxxxxxxxx>

Providenza & Boekelheide, Inc.

Other related posts: