我正在开发一个使用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:我已经在网上广泛搜索了解决方案,我已经尝试检查库安装等。但是,由于我可能错过了某些内容,欢迎任何基本的图书馆建议,我会确认我已经设置好了。
答案 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“
我没有尝试过,因为在我的情况下,第一个解决方案是好的。