Thank you for your reply. I apologize, I forgot to mention that we've
actually implemented SFX APO which accepts multichannel formats and then
downmixes them to stereo (exactly what you've described).
Unfortunately, for some reason most (if not all) games don't do any format
negotiation, and go straight for the mix format. So even though our SFX APO
accepts multichannel audio, games still initialize it with stereo format
(even though they do output true surround if we connect hardware that
natively supports 7.1). I thought that adding surround format via EFX APO
would fix the issue, but even though I've got the custom format to show up,
I still get this "format not supported" error when I try to select it.
Provided that neither of our APOs get any IsInput/IsOutputFormatSupported
calls with the custom format, and that APO registration flags also seem to
be correct, do you know what else could be causing the "Format not
supported by the device" error in mmsys.cpl?
On Tue, Nov 19, 2019 at 10:44 PM Matthew van Eerde <
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
*From: *Andrey Zui <dmarc-noreply@xxxxxxxxxxxxx>
*Sent: *Tuesday, November 19, 2019 11:51 AM
*Subject: *[wdmaudiodev] APO custom formats
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.)