[wdmaudiodev] Re: [EXTERNAL] SFX APO doesn't work when MS Teams runs :(

  • From: "Matthew van Eerde" <dmarc-noreply@xxxxxxxxxxxxx> ("Matthew.van.Eerde")
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Tue, 19 Oct 2021 20:20:24 +0000

As to the "how:"

There are two ways for apps to influence what kind of processing is applied to 
their streams.

One way, as you mention, is to use AUDCLNT_SHAREMODE_EXCLUSIVE. This is 
generally discouraged, for various reasons.

Another way is to fill up an AudioClientProperties object and pass it to 
IAudioClient2::SetClientProperties. One of the properties that a client can set 
is AUDCLNT_STREAMOPTIONS_RAW which will also disable non-essential processing.

Windows-universal-samples/WASAPIRenderer.cpp at main * 
microsoft/Windows-universal-samples * 
GitHub<https://github.com/microsoft/Windows-universal-samples/blob/main/Samples/WindowsAudioSession/cpp/WASAPIRenderer.cpp>
    // Opt into HW Offloading.  If the endpoint does not support offload it 
will return AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE
    AudioClientProperties audioProps = {0};
    audioProps.cbSize = sizeof( AudioClientProperties );
    audioProps.bIsOffload = m_DeviceProps.IsHWOffload;
    audioProps.eCategory = AudioCategory_Media;

    if (m_DeviceProps.IsRawChosen && m_DeviceProps.IsRawSupported)
    {
        audioProps.Options = AUDCLNT_STREAMOPTIONS_RAW;
    }

    hr = m_AudioClient->SetClientProperties( &audioProps );

As to the "why:" that's a good question, but you would need to ask the Teams 
folks.

From: wdmaudiodev-bounce@xxxxxxxxxxxxx <wdmaudiodev-bounce@xxxxxxxxxxxxx> On 
Behalf Of Culann mac Cabe
Sent: Tuesday, October 19, 2021 1:04 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [EXTERNAL] [wdmaudiodev] SFX APO doesn't work when MS Teams runs :(

Some people who received this message don't often get email from 
culann@xxxxxxxxxxx<mailto:culann@xxxxxxxxxxx>. Learn why this is 
important<http://aka.ms/LearnAboutSenderIdentification>
Hello wdmaudiodev people!

I have developed an APO which I instantiate as an SFX (one of its features is 
that it changes channel count from input->output and so I can't use it as an 
EFX).

I use it all the time: to watch and hear things on YouTube, Netflix, my 
favourite Music Player etc etc   I have noticed that, when using the Microsoft 
Teams App, I get no APO and I want to understand why or how best to find out.

I recalled a previous thread to the effect that when an audio endpoint device 
(typically a USB Headphone) is configured in Exclusive Mode, APOs may not be 
instantiated and so I made sure to disable this check box... still no APO.

So: can anyone explain to me please:
How/why it is that Teams prevents, in some way, the "usual" behaviour of my 
APO, even when I ensure to disable Exclusive Mode?

  *   APO is [1, 2, 5.1, 7.1]-channel In -> 2ch Out
  *   I install it as an SFX
Thanks!
Culann

Other related posts: