windows 上的 SDL 2 无法与音频设备一起工作
SDL 2 on windows works incorrectly with audio device
我似乎发现了为 mingw 编译的 SDL 库和 visual studio 之间的错误。
我正在尝试使用以下代码打开音频设备:
#include <SDL.h>
#include <stdio.h>
int main(int argc, char **argv)
{
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
exit(1);
}
SDL_AudioSpec wanted_spec, spec;
wanted_spec.channels = 2;
wanted_spec.freq = 44100;
wanted_spec.format = AUDIO_S16SYS;
wanted_spec.silence = 0;
wanted_spec.samples = 2048;
wanted_spec.callback = 0;
//wanted_spec.userdata = opaque;
while (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
printf("error cant open audio");
}
if (spec.format != AUDIO_S16SYS) {
printf("error wrong format");
return -1;
}
return 0;
}
通过 MSVS 编译时我得到 "error wrong format"
通过 mingw32 使用以下命令编译的相同代码:
g++ main.c -I/mingw32/include/SDL2 -L/mingw32/lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2
工作正常。有人可以指出我这样做的原因吗?这是在同一台机器上完成的。会不会是SDL库版本不同导致的?
有 2 个问题:
我下载了 SDL2.dll 的新版本。
这导致 OpenAudio 功能失败并出现 XAudio2Create()
错误。
我按照 Wagner Patriota 的建议解决了这个问题。
我添加了
putenv("SDL_AUDIODRIVER=DirectSound");
我似乎发现了为 mingw 编译的 SDL 库和 visual studio 之间的错误。
我正在尝试使用以下代码打开音频设备:
#include <SDL.h>
#include <stdio.h>
int main(int argc, char **argv)
{
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
exit(1);
}
SDL_AudioSpec wanted_spec, spec;
wanted_spec.channels = 2;
wanted_spec.freq = 44100;
wanted_spec.format = AUDIO_S16SYS;
wanted_spec.silence = 0;
wanted_spec.samples = 2048;
wanted_spec.callback = 0;
//wanted_spec.userdata = opaque;
while (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
printf("error cant open audio");
}
if (spec.format != AUDIO_S16SYS) {
printf("error wrong format");
return -1;
}
return 0;
}
通过 MSVS 编译时我得到 "error wrong format"
通过 mingw32 使用以下命令编译的相同代码:
g++ main.c -I/mingw32/include/SDL2 -L/mingw32/lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2
工作正常。有人可以指出我这样做的原因吗?这是在同一台机器上完成的。会不会是SDL库版本不同导致的?
有 2 个问题:
我下载了 SDL2.dll 的新版本。
这导致 OpenAudio 功能失败并出现
XAudio2Create()
错误。
我按照 Wagner Patriota 的建议解决了这个问题。 我添加了
putenv("SDL_AUDIODRIVER=DirectSound");