9

我正在开发一个使用 SDL/SDL_Mixer 播放 wav 文件的 C++ 应用程序。我一直在 Mac 上开发应用程序,没有太多问题。但是,我确实需要此应用程序才能在 Linux 上运行,因此我将 VirtualBox 放在装有 Ubuntu 12.04 LTS 的 Windows 7 机器上。编译工作正常,直到我真正尝试初始化系统。然后,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:我在网上广泛搜索了解决方案,并尝试检查库安装等。但是,由于我可能遗漏了什么,欢迎任何基本的库建议,我会确认我设置它们。

4

1 回答 1

8

在相同的情况下,我遇到了完全相同的问题,但使用的是 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) “

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

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

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

我没有尝试过,因为第一个解决方案对我来说是一个很好的解决方案。

于 2015-03-12T14:26:48.373 回答