[wdmaudiodev] Re: AW: Re: SFX APO not opened for each playing app

  • From: "Matthew van Eerde" <dmarc-noreply@xxxxxxxxxxxxx> (Redacted sender "Matthew.van.Eerde" for DMARC)
  • To: "wdmaudiodev@xxxxxxxxxxxxx" <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Fri, 13 Apr 2018 20:13:06 +0000

As of Windows 8.1 (which is also when LFX/GFX became SFX/MFX/EFX) you can use 
the “audio signal processing mode” to do different kinds of processing for 
different kinds of apps (e.g., communications vs. media etc.) This comes in as 
part of the APOInitSystemEffects2 initialization structure.

You cannot detect specific apps.

You need to advertise the specific kinds of effects you are adding in your APO 
(for the given mode) by implementing IAudioSystemEffects2::GetEffectsList. If 
this changes you need to signal the event handle that was passed in.

https://blogs.msdn.microsoft.com/iliast/2016/01/27/windows-8-1-audio-streaming-part-3-audio-processing/
APOInitSystemEffects2: 
https://msdn.microsoft.com/en-us/library/windows/desktop/dn280314(v=vs.85).aspx
IAudioSystemEffects2: 
https://msdn.microsoft.com/en-us/library/windows/desktop/dn280324(v=vs.85).aspx

You should expect one instance of the APO for every audio stream (an app might 
create multiple streams), plus potentially another instance if any apps query 
the effects.

There’s a sample effects discovery app here: 
https://code.msdn.microsoft.com/windowsapps/Audio-effects-discovery-5fd65c15

________________________________
From: wdmaudiodev-bounce@xxxxxxxxxxxxx <wdmaudiodev-bounce@xxxxxxxxxxxxx> on 
behalf of Johannes Freyberger <jfreyberger@xxxxxxxxxxxxxxxxxxxx>
Sent: Friday, April 13, 2018 1:04:46 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] AW: Re: SFX APO not opened for each playing app


  *   Like what kind of parameters?

I.e. different EQ-Settings if my SFX is an EQ, or different gain adjustments 
for an AGC – I think there’s a lot of use cases. I really would like to process 
the audio streams from different applications in a separate way, before they 
are mixed down by audiodg and finally arrive in my driver as an already mixed 
bunch of samples. For this I had the idea of an SFX APO, which I think could 
help me to access the different streams. But I’ve also not yet solved, how to 
find out which stream belongs to which application. Do you think this is 
possible?

Von: wdmaudiodev-bounce@xxxxxxxxxxxxx <wdmaudiodev-bounce@xxxxxxxxxxxxx> Im 
Auftrag von Matthew van Eerde (Redacted sender "Matthew.van.Eerde" for DMARC)
Gesendet: Freitag, 13. April 2018 21:19
An: wdmaudiodev@xxxxxxxxxxxxx
Betreff: [wdmaudiodev] Re: SFX APO not opened for each playing app


  *   different parameters inside my SFX depending on the application

Like what kind of parameters?

________________________________
From: wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx
<wdmaudiodev-bounce@xxxxxxxxxxxxx<mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx>> on 
behalf of Johannes Freyberger 
<jfreyberger@xxxxxxxxxxxxxxxxxxxx<mailto:jfreyberger@xxxxxxxxxxxxxxxxxxxx>>
Sent: Friday, April 13, 2018 11:39:03 AM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Subject: [wdmaudiodev] SFX APO not opened for each playing app

Dear Sirs,

I’ve written a little test SFX APO and it seems to be loaded correct inside 
audiodg.exe as I’m writing a logfile, where I can see the audiodg process id 
and the corresponding calls (APOProcess(), GetLatency() etc.) when I playback 
some test sounds in the audiodevice tab or in foobar2000. My idea was to have 
an SFX because it’s placed before the windows mixer, so I should see different 
instances of my SFX for each application playing back on the audio device. But 
I always only see one instance of my SFX running, also when I have several apps 
playing back simultaneously.

Is there a mistake in my idea or should this work? If yes, what could I check?

In the end I’d be interested in also figuring out which application is actually 
using my SFX in order to use different parameters inside my SFX depending on 
the application and I thought about something like traversing the filter graph 
back to the application and thus getting its process id. Could this be possible 
or is there any other chance to find out the playing application?

Thanks a lot and best regards,
Johannes

Other related posts: