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決して呼び出されないようだということです。before initAudiois runSDL_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 に答える