SDL_AudioStream * SDL_OpenAudioDeviceStream(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec, SDL_AudioStreamCallback callback, void *userdata);
| SDL_AudioDeviceID | devid | オープンするデバイスインスタンスID, またはSDL_AUDIO_DEVICE_DEFAULT_PLAYBACKまたはSDL_AUDIO_DEVICE_DEFAULT_RECORDINGで最も適したデフォルトデバイス |
| const SDL_AudioSpec * | spec | デバイスの設定. NULLで適切なデフォルト設定にできる |
| SDL_AudioStreamCallback | callback | アプリケーションが新しい再生データを送信する, または新しい録音データを受信するためのコールバック. アプリケーションがSDL_PutAudioStreamDataまたはSDL_GetAudioStreamDataを使う場合はNULLとする |
| void * | userdata | アプリケーションがコールバックに渡すポインタ. NULLも可能callbackがNULLのとき無視される
|
(SDL_AudioStream *) 使用の準備がされたオーディオストリームを戻す. 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる. このストリームを使用し終えてSDL_DestroyAudioStreamを呼ぶと, 資源の解放とデバイスのクローズが行われる.
アプリケーションが1つのデータ源からPCMオーディオを供給したいだけならば, この関数が一度の呼び出しでオーディオの設定を全て行う.
これはSDL2からアプリケーションを移行する簡単な手段でもある.
この関数はオーディオデバイスをオープンし, ストリームを生成してそれにバインドする. 他の初期化とは違い, オーディオデバイスはこのストリームを破棄したときクローズされる. そのため, アプリケーションは戻されたSDL_AudioStreamのみをオーディオの再生に必要な対象とすることができる.
これも他の関数とは違い, オーディオデバイスは一時停止状態から始まる. オーディオの処理を開始するためにストリームをバインドする過程がないため, SDL2の挙動により近いものになっている. オーディオデバイスはSDL_ResumeAudioStreamDevice()で一時停止を解除する必要がある.
この関数は再生と録音の両方に対応している.
spec引数はオーディオストリームのアプリケーション側を表す.
つまり, 録音の場合はデバイスからの出力の形式となり, 再生の場合はデバイスへの入力の形式となる.
specがNULLの場合, システムが形式を選択し, その後にアプリケーションはSDL_GetAudioStreamFormat()で情報を得る.
どのデバイスをオープンするのかが問題にならないならば, 再生ならばSDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, 録音ならばSDL_AUDIO_DEVICE_DEFAULT_RECORDINGを使うことができる(恐らく使わなければならない).
コールバック関数の指定は任意である. NULLならば, アプリケーションは再生データをキューに入れる(または録音データをキューから出す). NULLでなければ, デバイスの一時停止が解除されればコールバックの呼び出しが始まる.
戻されたストリームをSDL_DestroyAudioStreamで破棄すると, ストリームに関連付けられたオーディオデバイスもクローズされる.
この関数はどのスレッドからも安全に呼べる.