int SDL_OpenAudio(SDL_AudioSpec* desired, SDL_AudioSpec* obtained)
desired | 要求する出力形式のSDL_AudioSpec |
obtained | 実際のパラメータが代入されたSDL_AudioSpec, またはNULL |
この関数はオーディオデバイスを要求したパラメータで開く. 成功のとき0を戻し, 実際のハードウェアのパラメータをobtainedの示すポインタに書き込む.
obtainedがNULLの場合, コールバック関数に渡される音声データは要求した形式であることが保証されている. そして必要ならば実際のハードウェアの音声形式に自動的に変換される. obtainedがNULLの場合, desiredのフィールドが書き換えられる.
この関数はオーディオデバイスを開く, またはオーディオスレッドの設定に失敗したとき, 負の数のエラーコードを戻す. SDL_GetError()を呼んで詳細を知ることができる.
SDL_AudioSpec want, have;
SDL_memset(&want, 0, sizeof(want)); /* または SDL_zero(want); */
want.freq = 48000;
want.format = AUDIO_F32;
want.channels = 2;
want.samples = 4096;
want.callback = MyAudioCallback; /* この関数はどこか別の場所に書く. 詳細はSDL_AudioSpecを参照すること */
if (SDL_OpenAudio(&want, &have) < 0) {
SDL_Log("オーディオを開けなかった: %s", SDL_GetError());
} else {
if (have.format != want.format)
SDL_Log("32bit浮動小数点のオーディオ形式に対応していない");
SDL_PauseAudio(0); /* 再生を開始する */
SDL_Delay(5000); /* コールバックで音声を5秒間再生する */
SDL_CloseAudio();
}
この関数はSDL 1.2との互換性のために残されている. しかし, SDL 2.0の新しい関数よりもやや簡単に使えるという理由もある. オーディオデバイスを開く, 新しくより強力な推奨される方法は, SDL_OpenAudioDevice()を使うことである.
この関数は
SDL_CloseAudioDevice(1);
と同じである.
2つの異なる点がある.