Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用SDL_混音器时没有声音_C++_Sdl_Sdl Mixer - Fatal编程技术网

C++ 使用SDL_混音器时没有声音

C++ 使用SDL_混音器时没有声音,c++,sdl,sdl-mixer,C++,Sdl,Sdl Mixer,出于某些非常奇怪的原因,SDL_混音器绝对不会播放声音。我尝试了一切:重新安装库,检查音乐是否可以播放,使用Mix_FadeInMusic和Mix_FadeOutMusic,但完全没有效果。它告诉我音乐正在加载,它告诉我它正在播放。我正在使用Windows 8.1 64位和VC 2013 代码: 令人惊讶的是,SDL需要Windows下的一个环境变量(一个最初针对Linux的工件)才能实际输出音频 尝试设置SDL_AUDIODRIVER=waveout(也可以使用=dsound) 或者,您可以在

出于某些非常奇怪的原因,SDL_混音器绝对不会播放声音。我尝试了一切:重新安装库,检查音乐是否可以播放,使用Mix_FadeInMusic和Mix_FadeOutMusic,但完全没有效果。它告诉我音乐正在加载,它告诉我它正在播放。我正在使用Windows 8.1 64位和VC 2013

代码:


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

尝试设置SDL_AUDIODRIVER=waveout(也可以使用=dsound)

或者,您可以在SDL_Init()调用之后调用SDL_AudioInit(“waveout”)或SDL_AudioInit(“dsound”)。(为了提高效率,可以将flags参数修改为SDL_Init(),以指定除音频以外的所有内容)

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

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

我推测SDL的作者有一些默认设置,在Linux下是合理的,但在Windows下会造成混乱:

像您的(和ffplay)这样的客户端代码不会返回任何错误,也不会出现异常,只是SDL很高兴地将音频推到了空白处

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;