Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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
SDL MIX_LOADWAV()在加载某些wav文件时崩溃 我有一个C++程序,加载wave文件。并接受键盘敲击,使其起到钢琴的作用。最近,我尝试将wav文件从互联网上的笔记改为现场录制笔记。文件中唯一的区别可能是现场录音是立体声的。在任何情况下,当我给出Mix_LoadWAV(a.wav)时,它返回null[例如,所有实时录制加载null]_C++_Sdl - Fatal编程技术网

SDL MIX_LOADWAV()在加载某些wav文件时崩溃 我有一个C++程序,加载wave文件。并接受键盘敲击,使其起到钢琴的作用。最近,我尝试将wav文件从互联网上的笔记改为现场录制笔记。文件中唯一的区别可能是现场录音是立体声的。在任何情况下,当我给出Mix_LoadWAV(a.wav)时,它返回null[例如,所有实时录制加载null]

SDL MIX_LOADWAV()在加载某些wav文件时崩溃 我有一个C++程序,加载wave文件。并接受键盘敲击,使其起到钢琴的作用。最近,我尝试将wav文件从互联网上的笔记改为现场录制笔记。文件中唯一的区别可能是现场录音是立体声的。在任何情况下,当我给出Mix_LoadWAV(a.wav)时,它返回null[例如,所有实时录制加载null],c++,sdl,C++,Sdl,sdl 1.2 MIX_LOADWAV()是否有我应该知道的限制 bool LoadFiles() { Background = LoadImage("graphics/background.bmp"); cNote = Mix_LoadWAV("notes/c.wav" ); csNote = Mix_LoadWAV("notes/cs.wav" ); dNote = Mix_LoadWAV("notes/d.wav" ); dsNote = Mix_

sdl 1.2 MIX_LOADWAV()是否有我应该知道的限制

bool LoadFiles()
{
    Background = LoadImage("graphics/background.bmp");

    cNote = Mix_LoadWAV("notes/c.wav" );
    csNote = Mix_LoadWAV("notes/cs.wav" );
    dNote = Mix_LoadWAV("notes/d.wav" );
    dsNote = Mix_LoadWAV("notes/ds.wav" );
    eNote = Mix_LoadWAV("notes/e.wav" );
    fNote = Mix_LoadWAV("notes/f.wav" );
    fsNote = Mix_LoadWAV("notes/fs.wav" );
    gNote = Mix_LoadWAV("notes/g.wav" );
    gsNote = Mix_LoadWAV("notes/gs.wav" );
    aNote = Mix_LoadWAV("notes/a.wav" );
    asNote = Mix_LoadWAV("notes/as.wav" );
    bNote = Mix_LoadWAV("notes/b.wav" );
    highCNote = Mix_LoadWAV("notes/highC.wav" );

    if(Background == NULL || cNote == NULL || csNote == NULL || dNote == NULL || dsNote == NULL || eNote == NULL || fNote == NULL || fsNote == NULL || gNote == NULL || gsNote == NULL || aNote == NULL || asNote == NULL || bNote == NULL || highCNote == NULL)
    {
        printf("File load error\n");
        return false;
    }

    return true;
}

经过今天的艰苦努力,我想我解决了SDL混音器的WAV加载功能的问题。我重新录制了一些音效,一旦我更换了它们,我正在制作的游戏就彻底崩溃了。经过一些错误跟踪,我推断是Mixer拒绝加载新的WAV文件,但我不知道为什么

然后我想到我已经在Audacity中录制了新的音效,并将它们保存为32位有符号PCM,而不是16位PCM。

事实证明,加载_WAV不支持32位有符号PCM WAV文件,如果尝试加载它们,将崩溃。相反,您必须将其转换为16位有符号PCM WAV文件,即使用Audacity之类的程序。一旦你这样做了,它就会完美地工作

希望这能帮助像我和OP一样困惑的人走出困境!据我所知,文档中从来没有提到过这种限制,所以我确信它已经让很多人绊倒了


(注意的其他地方:)

来自SDL文档:。所以我会把它转换成OGG(或任何其他列出的东西),看看它是否有效。在任何情况下,我自己在SDL_mixer中的格式支持方面都有过不好的经验,但也许我们都做错了什么。这些文档对音频格式的细节不是很清楚。另外,我不确定SDL_混音器是否适合您所尝试的操作。我建议切换到更复杂的音频库(您可以尝试查找,因为我敢打赌,即使您解决了手头的这个问题,您也会遇到SDL的其他限制。我只是尝试了Mix_LoadMUS()而不是Mix_LoadWAV()这似乎是可行的。似乎Mix_LoadWAV并不适用于所有的wav文件Mix_LoadMUS似乎可以打开其他wav文件。但令人困惑的是,我试图找到关于wav和wav音乐文件之间区别的清晰文档。我试着将我的现场录音制作成单声道香奈儿wave文件,但没有任何帮助。我忘记了这一点当我在这个项目上工作时,我在SDL文档中基本上找到了这一点。SDL中有一个更宽松的声音函数,我最终使用了它,但一下子我就记不起它是什么了。