私はゲームのオーディオ部分を書いており、OpenAL を使用しています。いくつかの拡張機能を使用したいのですが、テストは常に失敗します:
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
これは、リバーブと EAX リバーブのみをサポートする Generic Software ドライバーしか入手できないためです。私のマシンだけでなく、他のマシンでも同様です。
OpenAL が使用するドライバーを検出する方法は次のとおりです。
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);
仕様によると、デバイス指定子は、NULL ターミネータで区切られた 'Generic Hardware' と 'Generic Software' の 2 つのドライバーを返す必要があります。
私のサウンド カードは、nvhda32v.sys ドライバー (バージョン 1.0.0.63、2009 年 11 月 11 日更新) を使用する「NVIDIA ハイ デフィニション オーディオ」デバイスです。
OpenAL がハードウェアを検出しないのはなぜですか?