簡體   English   中英

SDL MIX_LOADWAV() 在加載一些 wav 文件時崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM