C++ OpenAL,ALCOpendenice阻塞

C++ OpenAL,ALCOpendenice阻塞,c++,initialization,freeze,openal,C++,Initialization,Freeze,Openal,我一直在尝试使用OpenAL向我的程序中添加声音,但调用alcOpenDevice(NULL)时似乎需要初始化OpenAL冻结。我一直在互联网上寻找这个问题的解决方案,我甚至尝试重新安装OpenAL库,但似乎没有任何效果 ALCdevice* dev = NULL; ALCcontext* ctx = NULL; dev = alcOpenDevice(NULL); ctx = alcCreateContext(dev, NULL); alcMakeContextCurrent(ctx); 谢

我一直在尝试使用OpenAL向我的程序中添加声音,但调用
alcOpenDevice(NULL)时似乎需要初始化OpenAL冻结。我一直在互联网上寻找这个问题的解决方案,我甚至尝试重新安装OpenAL库,但似乎没有任何效果

ALCdevice* dev = NULL;
ALCcontext* ctx = NULL;
dev = alcOpenDevice(NULL);
ctx = alcCreateContext(dev, NULL);
alcMakeContextCurrent(ctx);

谢谢您的回答。

您不需要定义设备名称,它是这样工作的:

const char * devicename = alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER);

dev  = alcOpenDevice(devicename);
以下是OpenAL的一个简单c语言用法-它填充一个缓冲区,然后渲染声音:

https://github.com/scottstensland/openal_synth_play

一旦您超出了非常简单的使用范围,请确保为您的OpenAL逻辑提供一个专用的线程,否则您将无法获得声音,因为您将无法使用OpenAL

您的意思是此调用永远不会返回?您能在调试器中运行它并查看它在哪里暂停吗?@keltar对我来说,它在系统库中的另一个线程的某个位置暂停。选择默认设备时,NULL实际上是非常合适的。