SDL_LoadWAV未加载文件
SDL_LoadWAV not loading file
我想加载一个 wav 文件并使用以下代码播放它:
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
std::cerr << "Could not init SDL:" << SDL_GetError() << 'n';
}
SDL_AudioSpec wavSpec;
Uint32 wavLength;
Uint8 *wavBuffer;
if(SDL_LoadWAV("sound.wav", &wavSpec, &wavBuffer, &wavLength) == NULL) {
std::cerr << "Could not load wave:" << SDL_GetError() << 'n';
return;
}
SDL_AudioDeviceID deviceId = SDL_OpenAudioDevice(NULL, 0, &wavSpec, NULL, 0);
int success = SDL_QueueAudio(deviceId, wavBuffer, wavLength);
SDL_PauseAudioDevice(deviceId, 0);
SDL_CloseAudioDevice(deviceId);
SDL_FreeWAV(wavBuffer);
SDL_Quit();
但是SDL_LoadWav
返回NULL
。SDL_GetError
只是返回:
Couldn't open sounds.wav
我已经检查了该文件是否存在,但仍然没有运气。代码有什么问题吗?
出于调试目的,我还尝试使用如下ifstream
打开 wav:
std::ifstream ifs{"hitBrick.wav"};
if(!ifs) {
std::cerr << "cannot open plattform fstream n";
}
在这里它没有错误。
可能是什么问题?
编辑:
我可以找到 wav 无法加载的原因SDL_LoadWAV
.
根据SDL_LoadWav的文档,只有支持的波形格式是MS-ADPCM
和IMA-ADPCM
.
但我的文件是 PCM 格式。所以我使用 SOX 工具转换了 linux 下的文件:https://wiki.ubuntuusers.de/SoX/
现在我没有收到任何错误,但我也没有听到任何声音。这个问题可能是什么?
我在听不到声音时发现了问题。
SDL_PauseAudioDevice(deviceId, 0);
SDL_CloseAudioDevice(deviceId);
在这里,我准备播放声音并直接关闭它。
在声音之间有延迟可以听到:
SDL_PauseAudioDevice(deviceId, 0);
SDL_Delay(1000);
SDL_CloseAudioDevice(deviceId);
相关文章:
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- SDL_LoadWAV未加载文件
- 如果流无法加载文件,并且无法打开
- 无法使用 fopen() 加载文件
- 如何在mac上为c++加载文件
- 如何以编程方式知道Adobe Reader完成了加载文件
- 使用loadFromFile()函数加载文件
- 使用微小的xml保存和加载文件
- C++加载文件
- C++从SQL数据库加载文件
- 从"Resource Files"文件夹加载文件C++ Windows 应用程序 (win32)
- 构建时如何在Visual Studio c++中加载文件
- 用dlsym加载文件,无法加载库
- 当在c#中加载c++ dll时,CLR是否会自动加载c++文件的依赖项?
- OpenCV视频捕获不加载文件
- 用char指针加载文件
- TinyXml解析器拒绝正确加载文件
- CMake 错误在 CMakeLists.txt:56 (include): 包含找不到加载文件: gmxVersion