gpt4 book ai didi

c++ - OpenAL 和 Vista : Device is always 'Generic Software'

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:05 25 4
gpt4 key购买 nike

我正在编写游戏的音频部分,并且正在使用 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 混响。不仅在我的机器上,还有其他机器。

以下是我检测要使用的 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);

根据规范,设备说明符应返回两个驱动程序:'Generic Hardware' 和 'Generic Software',由 NULL 终止符分隔。

我的声卡是“NVIDIA High Definition Audio”设备,它使用 nvhda32v.sys 驱动程序(版本 1.0.0.63,更新于 11-11-2009)。

为什么 OpenAL 检测不到我的硬件?

最佳答案

OpenAL 应始终返回默认音频设备,除非您使用的是 Creative 声卡。这些扩展都是特定于创意的。这与期望在 NVIDIA 视频卡上获得英特尔特定的 OpenGL 扩展相同。

作为记录,以下是您设置 OpenAL 的方式:

// create a default device
ALCdevice* device = alcOpenDevice("");
if (!device)
{
LOG_ERROR("Could not create OpenAL device.");
return false;
}

// context attributes, 2 zeros to terminate
ALint attribs[6] = {
0, 0
};

ALCcontext* context = alcCreateContext(device, attribs);
if (!context)
{
LOG_ERROR("Could not create OpenAL context.");
alcCloseDevice(device);
return false;
}

if (!alcMakeContextCurrent(context))
{
LOG_ERROR("Could not enable OpenAL context.");
alcDestroyContext(context);
alcCloseDevice(device);
return false;
}

LOG_INFO("[OpenAL] Version: %s", alGetString(AL_VERSION));
LOG_INFO("[OpenAL] Vendor: %s", alGetString(AL_VENDOR));
LOG_INFO("[OpenAL] Renderer: %s", alGetString(AL_RENDERER));

关于c++ - OpenAL 和 Vista : Device is always 'Generic Software' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com