初始化SDL_Mixer时出现错误"No available audio device"

9

我正在开发一个使用SDL/SDL_Mixer播放wav文件的C++应用程序。在Mac上开发这个应用程序时没有遇到太多问题。但是,我需要让这个应用程序在Linux上运行,因此我在我的Windows 7机器上安装了带有Ubuntu 12.04 LTS的VirtualBox。编译正常,但当我尝试初始化系统时,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);
}

The exact error I get is:

initialize audio error: No available audio device

附言:我已经在网上广泛搜索了解决方案,并尝试检查库的安装等。然而,由于有可能我漏掉了一些东西,所以任何基本的库建议都是受欢迎的,我会确认它们已经设置好。


可能你没有正确设置你的虚拟机。 - BЈовић
有什么建议我可能设置不正确吗?所有其他程序都可以正常工作(当然除了这个问题),并且已经安装了Guest Additions。 - A.P.
1个回答

8

我在相同的情况下遇到了完全相同的问题,但是使用的是ubuntu 14.04LTS(Virtual box,W7作为主机)。但问题不在虚拟机配置上(其他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...让configure脚本找到新的头文件,以便包含PulseAudio和ALSA支持。”

我确实从源代码构建了SDL和SDL-mixer,但没有安装来自pulseAudio或ALSA的任何头文件。安装了提到的库并重新编译了SDL和SDL_mixer(v1.2)后,声音正常工作。

如果问题仍然存在,他还提到了另一种解决方案:

“如果您没有构建自己的SDL,则可以强制其使用其他音频路径: SDL_AUDIODRIVER=pulse ./mytestprogram 或 SDL_AUDIODRIVER=alsa ./mytestprogram”

在我的情况下,第一个解决方案是正确的,因此我没有尝试第二个解决方案。


我可以确认在Ubuntu Mate 20.04中使用SDL 1.2仍然需要执行此步骤,但我不确定对于SDL 2是否必要。 - jrh
仍然在Ubuntu Mate 20.04上使用自定义构建的SDL 1.2时遇到“无可用音频设备”和其他一些问题;可能需要更多步骤进行正确的安装。 - jrh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接