通常在Windows下,使用SDL打开音频设备【SDL_OpenAudioDevice()】失败,通过SDL_GetError()函数得知失败原因是“XAudio2: XAudio2Create() failed at open.”。
出现这种错误普遍都是没有初始Com,Com是Windows音频架构,在Windows系统中,音频设备和音频处理往往依赖于COM架构。
所以我们需要在调用SDL_OpenAudioDevice()之前并且在该线程中去初始化Com,调用CoInitializeEx(NULL,COINITBASE_MULTITHREADED); 需包含<windows.h>,并且程序要链接到Ole32.lib,这个lib库Windows都有,可以使用everything搜索一下本地库,这个库也分64/32位,不要被名字迷惑,链接匹配你应用程序位数的库就好。
注意:如果你在多个线程中都使用SDL_OpenAudioDevice()
,那么您需要在每个线程中分别初始化COM。这是因为COM的初始化是基于线程的,不同的线程需要不同的COM线程模型,并且每个线程退出的时候都要清理自己的com,也就是调用CoUninitialize();