【发布时间】:2010-04-26 16:55:55
【问题描述】:
我正在编写游戏的音频部分,并且正在使用 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
这是因为我只得到了Generic Software驱动,它只支持混响和EAX混响。不仅在我的机器上,在其他机器上也是如此。
以下是我如何检测 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 终止符分隔。
我的声卡是“NVIDIA High Definition Audio”设备,它使用 nvhda32v.sys 驱动程序(版本 1.0.0.63,于 2009 年 11 月 11 日更新)。
为什么 OpenAL 没有检测到我的硬件?
【问题讨论】:
-
如果 alcGetString() 返回 "Generic Software\0Generic Hardware\0\0" 您的代码将完全忽略第二个
-
除非它没有。它只返回通用软件。
标签: c++ audio hardware drivers openal