Windows 上的 SDL 2 在音频设备上无法正常工作

SDL 2 on windows works incorrectly with audio device

本文关键字:常工作 工作 SDL 上的 音频 Windows      更新时间:2023-10-16
似乎

我在为 mingw 和 Visual Studio 编译的 SDL 库之间发现了一个错误。

我正在尝试使用以下代码打开音频设备:

#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编译时,我得到"错误格式">

通过 mingw32 编译的相同代码,命令如下:

g++ main.c -I/mingw32/include/SDL2 -L/mingw32/lib -w -Wl,-subsystem,windows -lmingw32 -lSDL2main -lSDL2

工作正常。有人可以指出我的原因吗?这是在同一台计算机上完成的。这可能是由不同版本的 SDL 库引起的吗?

有 2 个问题:

  1. 我已经下载了新版本的 SDL2.dll。

  2. 这导致 OpenAudio 函数失败并出现XAudio2Create()错误。

我通过按照瓦格纳爱国者的建议解决了这个问题。我已添加

 putenv("SDL_AUDIODRIVER=DirectSound");