![](/img/trans.png)
[英]SDL_Mixer Mix_LoadWAV can not find RIFF or WAVE identifiers
[英]SDL MIX_LOADWAV() crashes on loading some wav files
我有一個加載波形文件的 C++ 程序。 並接受擊鍵以用作鋼琴。 最近,我嘗試將來自互聯網的筆記中的 wav 文件更改為現場錄音筆記。 文件的唯一區別可能是現場錄音是立體聲。 無論如何,當我給 Mix_LoadWAV(a.wav) 時,它返回 null [例如,所有現場錄音都加載 null]。
我應該知道的 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 Mixer 的 WAV 加載功能的問題。 我重新錄制了一些音效,一旦我更換它們,我正在制作的游戲就完全崩潰了。 經過一些錯誤跟蹤,我推斷是 Mixer 拒絕加載新的 WAV 文件,但我想不出原因。
然后我想到我已經在 Audacity 中錄制了新的音效,並將它們保存為32 位簽名 PCM,而不是16 位 PCM。
事實證明, Load_WAV 不支持 32 位簽名的 PCM WAV 文件,如果您嘗試加載它們,將會崩潰。 相反,您必須將它們轉換為 16 位簽名的 PCM WAV 文件,即使用像 Audacity 這樣的程序。 一旦你這樣做了,它就完美地工作了。
希望這可以幫助像我和 OP 一樣困惑的人! 據我所知,文檔從來沒有在任何地方說這個限制,所以我相信它已經絆倒了很多人。
(注意到的其他地方: https : //gamedev.stackexchange.com/questions/136817/how-to-get-sdl2-to-play-32bit-wav-files )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.