初始化SDL_Mixer会出现错误"没有可用的音频设备"

A.P*_*.P. 7 c++ ubuntu sdl

我正在使用一个C++应用程序,它使用SDL/SDL_Mixer来播放wav文件.我一直在Mac上开发应用程序没有太大问题.但是,我确实需要这个应用程序在Linux上工作,所以我把VirtualBox放在我的Windows 7机器上,使用Ubuntu 12.04 LTS.编译工作正常,直到我实际尝试初始化系统.然后,SDL_Mixer给出错误"没有可用的音频设备".

这是抛出错误的代码:

using namespace std;

void simple_sound_init() {
    if (SDL_Init(SDL_INIT_AUDIO) == -1) {
        fprintf(stderr, "init SDL error: %s\n", SDL_GetError());
        SDL_Quit();
        exit(1);
    }

    if (Mix_OpenAudio(SOUNDSAMPLERATE, MIX_DEFAULT_FORMAT, 1, 1024) != 0) {
        fprintf(stderr, "initialize audio error: %s\n", Mix_GetError());
        Mix_CloseAudio();
        SDL_Quit();
        exit(1);
    }

    Mix_ChannelFinished(simple_sound_channel_finised);
}
Run Code Online (Sandbox Code Playgroud)

我得到的确切错误是:

initialize audio error: No available audio device
Run Code Online (Sandbox Code Playgroud)

P/S:我已经在网上广泛搜索了解决方案,我已经尝试检查库安装等.但是,由于我可能错过了某些内容,欢迎任何基本的库建议,我会确认我让他们成立.

小智 6

我在同样的情况下得到了同样的问题,但是使用ubuntu 14.04LTS(虚拟框,W7作为主机).但问题不在于VM配置(声音适用于其他ubuntu应用程序).

我找到了答案:http: //forums.libsdl.org/viewtopic.php?t = 7609&sid = 40fdb9756b8e22e1b8253cda3338845f

感谢Ryan C. Gordon写道:

"如果你构建了自己的SDL,你可能没有PulseAudio(或ALSA)的开发标题,所以它试图使用/ dev/dsp,这在许多现代Linux系统上都不存在(因此,SDL_Init(SDL_INIT_AUDIO)成功,但是当你尝试打开一个设备时没有找到任何设备."apt-get install libasound2-dev libpulse-dev"并重建SDL ...让配置脚本找到新的标题,这样它就包括PulseAudio和ALSA支持."

我从源头有效地构建了SDL和SDL混合器,但没有来自pulseAudio或ALSA的任何头文件.在安装了提及并重新编译SDL和SDL_mixer(v1.2)的库后,声音工作正常.

如果问题仍然存在,他还谈到另一个解决方案:

"如果您没有构建自己的SDL,也许可以强制它使用不同的音频路径:SDL_AUDIODRIVER = pulse ./mytestprogram或SDL_AUDIODRIVER = alsa ./mytestprogram"

我没有尝试过,因为在我的情况下,第一个解决方案是好的解决方案.