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.
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
There’s a sample effects discovery app here:
From: wdmaudiodev-bounce@xxxxxxxxxxxxx <wdmaudiodev-bounce@xxxxxxxxxxxxx> on
behalf of Johannes Freyberger <jfreyberger@xxxxxxxxxxxxxxxxxxxx>
Sent: Friday, April 13, 2018 1:04:46 PM
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
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
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?
behalf of Johannes Freyberger
Sent: Friday, April 13, 2018 11:39:03 AM
Subject: [wdmaudiodev] SFX APO not opened for each playing app
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,