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

# SDL_QueueAudio

コールバック関数を使わずに音声デバイスのキューにデータを送信する

## 構文

`int SDL_QueueAudio(SDL_AudioDeviceID dev, const void* data, Uint32 len)`

## 引数

dev | 音声データを送信する音声デバイスのID
data | 再生させるデータ
len | データのバイト長(サンプル数ではない!)

## 戻り値

成功のとき0, 失敗のとき負の数のエラーコードを戻す. SDL_GetError()で詳細を知ることができる.

## 詳細

キューされた音声データを, コールバックではない録音デバイスから受け取りたいならば, この関数ではなくSDL_DequeueAudio()を使うこと. SDL_QueueAudio()を録音デバイスに対して使うと, エラーを表す-1を戻すだろう.

SDLには音声データをデバイスに与える2つの方法がある. SDLがコールバック関数を周期的に呼んで音声データを得る方法(引きの方法)と, コールバックを使わずにあなたがこの関数で音声データを定期的に与える方法(押しの方法)である.

キューできるデータの量にはアドレス空間以外の制限はない. キューされたデータは, アプリケーションが何もしなくても, 必要に応じてデバイスが取り出す. デバイスがデータを必要とするがキューにデータがない場合は, 代わりに無音になる. これは十分な十分なデータを定期的にキューできない場合は再生が途切れることを意味する.

この関数は与えられたデータをコピーする. よって, この関数から戻った後は安全に解放できる. この関数はスレッドセーフである. しかし, 一度に2つのスレッドから1つのデバイスにキューした場合, どちらのバッファが先にキューされるかはわからない.

アプリケーション提供のコールバック関数が使うデバイスに音声をキューしてはならない. そのようなデバイスに対しては, この関数は常に無効である. コールバック関数を使うか, SDL_QueueAudio()で音声をキューに入れるかのどちらかで, 両方を行ってはならない.

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

SDL2はplanar audioに対応していない. あらかじめplanar audioフォーマットからplanarではないもの(SDL_AudioFormatを参照すること)にリサンプルする必要がある.

## バージョン

SDL 2.0.4以降

## 関連項目(関数)

SDL_ClearQueuedAudio
SDL_GetQueuedAudioSize

## SDL Wikiへのリンク

SDL_QueueAudio - SDL Wiki