出于某些非常奇怪的原因,SDL_mixer 绝对没有声音播放。我已经尝试了一切:重新安装库,检查音乐是否真的可以播放,使用 Mix_FadeInMusic 和 Mix_FadeOutMusic,绝对没有效果。它告诉我音乐正在加载,它告诉我它正在播放。我在 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;
最佳答案
令人惊讶的是,SDL 需要 Windows 下的环境变量(最初针对 Linux 的工件)才能实际输出音频。
尝试设置 SDL_AUDIODRIVER=waveout(或者您可以使用 =dsound)。
或者,您可以在调用 SDL_Init() 之后调用 SDL_AudioInit("waveout") 或 SDL_AudioInit("dsound")。 (为了提高效率,您可以将您的标志参数修改为 SDL_Init() 以指定除音频外的所有内容)。
SDL_AudioInit() 被作者评论为“内部”api。在库的其他地方调用它来...猜猜...使用从环境变量中获取的字符串初始化您的音频。
我在使用 ffmpeg 的 ffplay 时遇到了这个问题,它依赖于(静态链接的)SDL 来输出音频(然后无法输出音频,除非/直到我手动设置 env 变量)。
我推测 SDL 作者有一些默认设置,在 Linux 下是合理的,但在 Windows 下会造成麻烦:
像您的(和 ffplay)这样的客户端代码没有返回任何错误,也没有异常,只是 SDL 愉快地将音频推送到空白中。
关于c++ - 使用SDL_mixer时没有声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24825274/