[wdmaudiodev] Re: AUDCLNT_STREAMFLAGS_LOOPBACK

  • From: "Matthew van Eerde" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "Matthew.van.Eerde" for DMARC)
  • To: ambrish dantrey <a4ambrish@xxxxxxxxx>, "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 29 Sep 2016 17:40:27 +0000

+wdmaudiodev again

I’m glad you asked, because marking the voice chat data as protected will not 
do anything helpful for you. It’s really for paid music services that want to 
protect their content from being extracted digitally, e.g. anything that uses 
PlayReady.

The solution to your problem, I think, is to break the feedback loop using 
other means, such as acoustic echo cancelation.

From: ambrish dantrey<mailto:a4ambrish@xxxxxxxxx>
Sent: Thursday, September 29, 2016 10:33 AM
To: Matthew van Eerde<mailto:Matthew.van.Eerde@xxxxxxxxxxxxx>
Subject: Re: [wdmaudiodev] Re: AUDCLNT_STREAMFLAGS_LOOPBACK

Thanks. I have tried this approach and it works under limited testing but as 
you mentioned, it seems rather elaborate way of achieving this.

What happens if I mark the voice chat data as protected? I know it would 
prevent loopback mode from capturing it but would other applications still be 
able to render on that endpoint?


On Thu, Sep 29, 2016 at 10:58 PM, Matthew van Eerde 
<Matthew.van.Eerde@xxxxxxxxxxxxx<mailto:Matthew.van.Eerde@xxxxxxxxxxxxx>> wrote:
You can get what is coming out of the speaker, but you cannot get 
everything-coming-out-the-speaker-except-for-one-app.

I have heard of people ginning up a solution based on virtual audio endpoints.

1.       Suppose your physical output is Speakers.

2.       Create a new virtual endpoint – call it Virtual – and make it the 
default audio output.

3.       All audio apps will play to Virtual.

4.       Except your app. Your app will play directly to Speakers.

5.       Create a virtual audio cable from Virtual to Speakers.

6.       So everything ends up coming out of Speakers.

7.       Have your app do loopback capture on Virtual

This is, of course, a tremendous hack.

From: ambrish dantrey<mailto:a4ambrish@xxxxxxxxx>
Sent: Thursday, September 29, 2016 10:12 AM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Subject: [wdmaudiodev] Re: AUDCLNT_STREAMFLAGS_LOOPBACK

To elaborate further, my application is a chat application. It intends to 
render is audio coming from client. There is another application that uses 
loopback mode to capture audio data and send it back to client.

Right now, client's voice, that gets played out on default endpoint, gets 
recorded using loopback mode and gets sent back to client, creating a bad echo 
effect.



On Thu, Sep 29, 2016 at 10:28 PM, ambrish dantrey 
<a4ambrish@xxxxxxxxx<mailto:a4ambrish@xxxxxxxxx>> wrote:
Hi Guys,

I know I can initialize an IAudioClient with AUDCLNT_STREAMFLAGS_LOOPBACK flag 
and it would let me capture audio data from Windows audio mixer. I also know 
that this doesn't work if an application has opened its audio stream in 
exclusive mode.

Is there another way for application to indicate that it doesn't want its data 
to be captured using loopback mode, but without using endpoint in exclusive 
mode? I want to write a render application that plays audio data in shared mode 
(rendering on default audio endpoint along with other applications) but I don't 
want my data to be captured by an application which is using loopback capture.

Please note that intention behind this question is not security or content 
protection. There is a peculiar usecase I am trying to enable.

Would appreciate any insights greatly.

Thanks




Other related posts: