目次 - API(機能別) - 再生と録音 - SDL_DequeueAudio

# SDL_DequeueAudio

コールバックではない録音デバイスからキューされた音声データを取り出す

## 構文

`Uint32 SDL_DequeueAudio(SDL_AudioDeviceID dev, void* data, Uint32 len)`

## 引数

dev | 音声データを取り出す音声デバイスのID
data | 音声データのコピー先へのポインタ
len | dataのバイト長(サンプル数ではない!)

## 戻り値

成功のとき取り出されたキューのバイト長を戻す. 要求より短いこともある. SDL_GetError()で詳細を知ることができる.

## 詳細

コールバックではない再生デバイスに音声データを送信したいならば, この関数ではなくSDL_QueueAudio()を使うこと. SDL_DequeueAudio()を再生デバイスに対して使うと, 常に0を戻すだろう.

SDLには音声データをデバイスから受け取る2つの方法がある. 録音デバイスが音声を受け取るたびにSDLがコールバック関数を呼ぶ方法(引きの方法)と, コールバックを使わずにあなたがこの関数を定期的に呼んで音声データを受け取る方法(押しの方法)である.

キューできるデータの量にはアドレス空間以外の制限はない. デバイスから送られたデータは, アプリケーションが何もしなくても, 必要に応じてキューにためられる. これは, 定期的にキューから取り出さなければ, いずれはメモリを使い果たすことを意味する.

録音デバイスを一時停止するとデータをキューしない. つまり, もししばらくの時間録音したくないならば, SDL_PauseAudioDevice()で録音デバイスを止めてデータがキューされないようにすればよい. これは, 例えばステージのロード中などで有用である. 一時停止を解除すると, 一時停止中のデータは破棄され, その時点から音声データのキューを開始する.

この関数はスレッドセーフである. しかし, 一度に2つのスレッドから1つのデバイスのキューに対して取り出そうとした場合, どちらが先に取り出すかははわからない.

アプリケーション提供のコールバック関数が使うデバイスのキューから音声データを取り出してはならない. その場合はエラーを戻す. コールバック関数を使うか, この関数で音声をキューから取り出すかのどちらかで, 両方を行ってはならない.

キューする前にSDL_LockAudio()を呼んではならない. この関数の内部でSDLはロックを扱っている.

## バージョン

この関数はSDL 2.0.5以降で使える.

## 関連項目(関数)

SDL_ClearQueuedAudio
SDL_GetQueuedAudioSize

## SDL Wikiへのリンク

SDL_DequeueAudio - SDL Wiki