gpt4 book ai didi

c++ - 使用SDL_mixer时没有声音

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:07 24 4
gpt4 key购买 nike

出于某些非常奇怪的原因,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com