SDL MIX_LOADWAV()在加载某些wav文件时崩溃 我有一个C++程序,加载wave文件。并接受键盘敲击,使其起到钢琴的作用。最近,我尝试将wav文件从互联网上的笔记改为现场录制笔记。文件中唯一的区别可能是现场录音是立体声的。在任何情况下,当我给出Mix_LoadWAV(a.wav)时,它返回null[例如,所有实时录制加载null]
sdl 1.2 MIX_LOADWAV()是否有我应该知道的限制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_
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中有一个更宽松的声音函数,我最终使用了它,但一下子我就记不起它是什么了。