I have a problem using getDriverCaps. What I’m trying to do is to check which EAX versions are supported by the default sound card. Here’s the (simplified) code:
FMOD_RESULT result = FMOD::EventSystem_Create(&m_eventSystem);
result = m_eventSystem->getSystemObject(&m_system);
result = m_system->getDriverCaps(0, &caps, NULL, NULL, &speakerMode);
if (caps & FMOD_CAPS_REVERB_EAX2)
// EAX 2.0 supported...
The problem is that none of the EAX fields are true in the caps. I have Sound Blaster X-Fi ExtremeGamer, so surely my card supports even newer EAX versions than 2.0. In addition, the FMOD_CAPS_HARDWARE field returns false.
Despite FMOD saying that EAX is not supported, the EAX effects are working. What am I missing here?
BTW, I’m using Windows Vista 64-bit.
- JoniM asked 10 years ago
There is no direct hardware support on Windows Vista, Microsoft used to provide access to things like EAX through it’s Direct Sound API. On Vista Direct Sound is implemented on top of their new low level API called WASAPI which does not have the same access to EAX as Windows XP does. So when you use FMOD on Vista you will automatically default to using our WASAPI implementation to get the best performance.
If you really want to use EAX you can try using our Open AL output mode (on Vista this is the only way to have EAX), but it is still considered a beta product as it hasn’t had extensive testing. Otherwise you can always use software mode with FMOD and get comparable quality of EAX reverbs.
Thanks for your reply.
What I still don’t understand is why the EAX effects could still be played. Is fmod switching automatically to software, even if I’m initializing the system with FMOD_INIT_SOFTWARE_DISABLE?
And just making sure – is this the only thing needed to enable OpenAL output in Vista?
But this doesn’t affect the device caps, so I’m still unable to determine what EAX versions the card supports. I was going to have an "enable EAX"-feature in the game engine for those who have EAX 2.0 or later, but maybe I could let the audio system just use the best possible configuration.
When you are on Vista you will not get hardware sounds playing since Vista doesn’t support hardware (through DSound or WASAPI), all sounds will fall back to software mode (which is probably what you are experiencing).
You are setting OpenAL correctly, you should receive the FMOD_CAPS_REVERB_EAX5 flag with your Xfi. Maybe you are not querying the correct device? Have you tried using getNumDrivers() and getDriverInfo() to get a list of all the devices, then make sure you are passing the index of your Xfi to the getDriverCaps function.
Also are you checking error codes from each FMOD function, for instance you need to call setOutput() before calling init() or you will get an error.
That was it, I was only checking from FMOD_CAPS_REVERB_EAX2 to FMOD_CAPS_REVERB_EAX4. I thought fmod would report all those flags if the device supports many EAX versions. By checking also FMOD_CAPS_REVERB_EAX5 and using OpenAL output, it is now working fabulously. Thanks!
Please login first to submit.