【发布时间】:2021-06-09 03:01:50
【问题描述】:
我有一个加载波形文件的 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 文档:sdl.beuc.net/sdl.wiki/Mix_LoadWAV。所以我会将它转换为 OGG(或任何其他列出的东西),看看它是否有效。无论如何,我自己在 SDL_mixer 中对格式支持的体验很糟糕,但也许我们都做错了。文档对音频格式的细节不是很清楚:/
-
另外,我不确定 SDL_mixer 是否适合您尝试做的事情。我建议切换到更复杂的音频库(您可以尝试查看here,因为我敢打赌,即使您解决了这个问题,您也会遇到 SDL 的其他限制。
-
我刚刚尝试了 Mix_LoadMUS() 而不是 Mix_LoadWAV(),它似乎可以工作。似乎 Mix_LoadWAV 不适用于所有 wav 文件 Mix_LoadMUS 似乎可以很好地打开其他 wav。虽然令人困惑,但我尝试找到有关 wav 和 wav 音乐文件之间区别的明确文档。我尝试将我的现场录音制作成单声道 chanel 波形文件,但这没有帮助。