Virtual surround sound is typically implemented in the SFX. The idea is that
the audio API the game uses to stream will call IAudioClient::IsFormatSupported
with the multichannel format; your SFX will succeed this; and then you can
downmix to the mix format.
Custom EFX output formats are used historically for things like real-time
compression of multichannel PCM to something like Dolby Digital or DTS which
will fit over a limited-bandwidth S/PDIF transport. Search for “encoding GFX”.
From: Andrey Zui<mailto:dmarc-noreply@xxxxxxxxxxxxx>
Sent: Tuesday, November 19, 2019 11:51 AM
To: wdmaudiodev@xxxxxxxxxxxxx<mailto:wdmaudiodev@xxxxxxxxxxxxx>
Subject: [wdmaudiodev] APO custom formats
Hello,
I'm currently trying to expose custom formats supported by my EFX APO via
IAudioSystemEffectsCustomFormats. So far I've managed to get custom formats to
show up in the Advanced tab in Sound Control Panel (mmsys.cpl), but whenever I
try to apply one of the custom formats I get "Format not supported by the
device" error.
I've checked and it looks like APO's IsInputFormatSupported method is not being
called with the new format at all. I've also tried setting various APO flags
(including APO_FLAG_NONE) and it still didn't help.
At this point I'm wondering whether adding custom formats is still supported,
since apparently this functionality was added back in Vista and after all these
years I've only been able to find only a couple of discussions about it.
To add some context, I'm trying to add surround formats to a USB stereo headset
to enable sound virtualization in games (since games tend to look only at the
mix format). AFAIK usually this is accomplished via custom kernel driver, but
I'd like to implement this without touching the kernel, if at all possible.
(I've also heard that recent Windows updates brought some changes which might
have helped, but after some testing it seems that the issue is still there,
even on the latest Windows Insider builds.)
Thanks,
Andrey