views:

154

answers:

2

I'm writing the audio part of a game, and I'm using OpenAL. I want to use some extensions, but the tests always fail:

TRACE: AudioManager - Sound device: 'Generic Software'
TRACE: AudioManager - Enabling OpenAL extensions...
TRACE: AudioManager - Compressor support: NO
TRACE: AudioManager - Reverb support: YES
TRACE: AudioManager - Chorus support: NO
TRACE: AudioManager - Distortion support: NO
TRACE: AudioManager - Echo support: NO
TRACE: AudioManager - Flanger support: NO
TRACE: AudioManager - Frequency shifter support: NO
TRACE: AudioManager - Vocal morpher support: NO
TRACE: AudioManager - Pitch shifter support: NO
TRACE: AudioManager - Ring modulator support: NO
TRACE: AudioManager - AutoWAH support: NO
TRACE: AudioManager - Equalizer support: NO
TRACE: AudioManager - EAX Reverb support: YES

This is because I only get the Generic Software driver, which only supports reverb and EAX reverb. And not just on my machine, but others as well.

Here's how I detect the drivers for OpenAL to use:

ALchar device[256];
ZeroMemory(device, 256);
if (alcIsExtensionPresent(NULL, "ALC_ENUMERATE_ALL_EXT"))
{
    strcpy_s(device, 256, alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER));
}
else if (alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT"))
{
    strcpy_s(device, 256, alcGetString(NULL, ALC_DEVICE_SPECIFIER));
}

TRACE_AUDIOMANAGER("Sound device: '%s'", device);

g_System = alcOpenDevice(device);

According to the specification, the device specifier should return two drivers: 'Generic Hardware' and 'Generic Software', separated by a NULL terminator.

My sound card is an "NVIDIA High Definition Audio" device which is using the nvhda32v.sys driver (version 1.0.0.63, updated on 11-11-2009).

Why doesn't OpenAL detect my hardware?

+1  A: 

are you sure you check the next string, because alcGetString(NULL, ALC_DEVICE_SPECIFIER) returns string array, try like this:

char* devices = (char*)alcGetString(NULL, ALC_DEVICE_SPECIFIER);
while(devices && *devices !=NULL)
{
    ALCdevice* device = alcOpenDevice(devices);
    ...
    ...
    devices += strlen(devices) + 1; //next device
}
uray
A: 

There is no "Generic Hardware" device on Vista: http://connect.creativelabs.com/openal/OpenAL%20Wiki/OpenAL%C2%AE%20and%20Windows%20Vista%E2%84%A2.aspx

Cheers!

Luis