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

时间:2012-05-05 19:22:49

标签: c++ ubuntu sdl

我正在开发一个使用SDL / SDL_Mixer来播放wav文件的C ++应用程序。我一直在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);
}

我得到的确切错误是:

initialize audio error: No available audio device
P / S:我已经在网上广泛搜索了解决方案,我已经尝试检查库安装等。但是,由于我可能错过了某些内容,欢迎任何基本的图书馆建议,我会确认我已经设置好了。

1 个答案:

答案 0 :(得分: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的 安装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“

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

相关问题