使用SDL_mixer时没有声音

时间:2014-07-18 12:39:50

标签: c++ sdl sdl-mixer

出于一些非常奇怪的原因,SDL_mixer绝对没有声音。我已经尝试了一切:重新安装库,检查音乐是否实际可播放,使用Mix_FadeInMusic和Mix_FadeOutMusic,绝对没有AVAIL。它告诉我音乐正在加载,它告诉我它正在播放。我在VC 2013中使用Windows 8.1 64位。

代码:

SDL_Init(SDL_INIT_EVERYTHING);
// Create window

Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG | MIX_INIT_FLAC | MIX_INIT_FLUIDSYNTH | MIX_INIT_MOD | MIX_INIT_MODPLUG);

if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096)) {
    printf("Unable to open audio!\n");
    ovr_Shutdown();
    SDL_Quit();
    exit(1);
}

music = Mix_LoadMUS(tmpLoc);
if (music == NULL) SDL_ShowSimpleMessageBox(NULL, "", "Music is null", window);
Mix_PlayMusic(music, -1,1000);
if (!Mix_PlayingMusic()) SDL_ShowSimpleMessageBox(NULL, "", "No music playing", window);

// OpenGL stuff
while (quit == false)
{
    // Loop
}
Mix_HaltMusic();
Mix_FreeMusic(music);
Mix_CloseAudio();
Mix_Quit();
SDL_DestroyWindow(window);
SDL_Quit();
return 0;

1 个答案:

答案 0 :(得分:0)

令人惊讶的是,SDL需要Windows下的环境变量(最初针对Linux的工件)才能实际输出音频。

尝试设置SDL_AUDIODRIVER = waveout(或者你可以使用= dsound)。

或者,您可以在SDL_Init()调用之后调用SDL_AudioInit(“waveout”)或SDL_AudioInit(“dsound”)。 (为了提高效率,你可以将你的flags参数修改为SDL_Init()来指定all-but-audio)。

SDL_AudioInit()被作者评论为“内部”api。在图书馆的其他地方,它被称为...猜测...使用从环境变量中获取的字符串初始化音频。

我在使用ffmpeg的ffplay时遇到了这个问题,ffplay依赖于(静态链接的)SDL来输出音频(然后输出音频失败,除非/直到我手动设置env变量)。

我推测SDL作者有一些在Linux下是明智的默认值,但在Windows下会造成麻烦:

像你的客户端代码(和ffplay)没有返回任何错误,也没有例外,只是SDL乐意将音频推送到虚空中。

相关问题