Uint32 SDL_DequeueAudio(SDL_AudioDeviceID dev, void* data, Uint32 len)
dev | 音声データを取り出す音声デバイスのID |
data | 音声データのコピー先へのポインタ |
len | dataのバイト長(サンプル数ではない!) |
コールバックではない再生デバイスに音声データを送信したいならば, この関数ではなくSDL_QueueAudio()を使うこと. SDL_DequeueAudio()を再生デバイスに対して使うと, 常に0を戻すだろう.
SDLには音声データをデバイスから受け取る2つの方法がある. 録音デバイスが音声を受け取るたびにSDLがコールバック関数を呼ぶ方法(引きの方法)と, コールバックを使わずにあなたがこの関数を定期的に呼んで音声データを受け取る方法(押しの方法)である.
キューできるデータの量にはアドレス空間以外の制限はない. デバイスから送られたデータは, アプリケーションが何もしなくても, 必要に応じてキューにためられる. これは, 定期的にキューから取り出さなければ, いずれはメモリを使い果たすことを意味する.
録音デバイスを一時停止するとデータをキューしない. つまり, もししばらくの時間録音したくないならば, SDL_PauseAudioDevice()で録音デバイスを止めてデータがキューされないようにすればよい. これは, 例えばステージのロード中などで有用である. 一時停止を解除すると, 一時停止中のデータは破棄され, その時点から音声データのキューを開始する.
この関数はスレッドセーフである. しかし, 一度に2つのスレッドから1つのデバイスのキューに対して取り出そうとした場合, どちらが先に取り出すかははわからない.
アプリケーション提供のコールバック関数が使うデバイスのキューから音声データを取り出してはならない. その場合はエラーを戻す. コールバック関数を使うか, この関数で音声をキューから取り出すかのどちらかで, 両方を行ってはならない.
キューする前にSDL_LockAudio()を呼んではならない. この関数の内部でSDLはロックを扱っている.
SDL 2.0.5以降