1

我正在尝试通过 mingw32 环境为使用 SDL 的 C++ 应用程序流式传输音频。据我了解,这是一件相当简单的事情:

extern "C" void audioStep(void* unused, Uint8* stream, int len);

void initAudio()
{
    SDL_AudioSpec* fmt;
    fmt = (SDL_AudioSpec*)malloc(sizeof(SDL_AudioSpec));
    fmt->freq = 22050;
    fmt->format = AUDIO_S16;
    fmt->channels = 1;
    fmt->samples = 8192;
    fmt->callback = audioStep;
    fmt->userdata = NULL;
    SDL_AudioSpec obFmt;

    if (SDL_OpenAudio(fmt, &obFmt) < 0)
    {
        fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError());
        getchar();
        exit(1);
    }

    SDL_PauseAudio(0);
}

.
.
.

extern "C" void audioStep(void* unused, Uint8* stream, int len)
{
    // Do stuff.
}

我遇到的问题是audioStep似乎从来没有被调用过。在initAudio运行之前SDL_Init使用SDL_INIT_EVERYTHING. 然后完全初始化图形(SDL_SetVideoMode等等),然后使用上面的代码初始化音频系统。

有没有可能我在没有音频支持的情况下编译了 SDL?(有没有办法检查音频是否启用或者它是否使用某种空音频设备?)

4

2 回答 2

1

我在 SDL.NET 中有工作代码,所以也许这会有所帮助。我发现我必须打开一个视频窗口:

  SdlDotNet.Graphics.Video.SetVideoMode(1, 1);
  SdlDotNet.Audio.Mixer.OpenAudio(stream);
  // BUG: close (or hide) it
  SdlDotNet.Graphics.Video.Close();

否则,它将无法正确初始化。

于 2012-09-12T12:57:48.180 回答
0

如果您从不播放声音,为什么应该调用 @audioStep@?没什么可做的。

使用 SDL 声音

于 2012-08-13T07:38:16.127 回答