目次 - SDL 3.0 API(機能別) - 再生と録音
再生と録音
概要
SDLライブラリのオーディオ機能.
SDL3では全てのオーディオはSDL_AudioStreamを中心としている.
音声の再生, 録音, 変換, ストリーム化, バッファリング, ミックスの全ての場合でオーディオストリームを経由することになる.
オーディオストリームは非常に柔軟である.
いつでも任意の形式の任意の量のデータを受け入れることができ, どちらかの側が途中で形式が変わったとしても他の形式で出力できる.
アプリケーションがオーディオデバイスを開き, それを任意の番号のオーディオストリームとバインドし, 可能ならばデータを与える.
デバイスがさらにデータを必要とした場合は, デバイスは全てのバインドされたストリームからデータを得て, それをミックスして再生する.
オーディオストリームは, アプリケーションがあらかじめ設定したコールバックを利用して必要なたびにデータを供給することもできる. これはSDL2のオーディオモデルに対応している.
プログラムのデータの基本的な読み込みのために, SDLはSDL_LoadWAV(もしファイルから読み込まないならばSDL_LoadWAV_IOも)で簡単な.WAVローダも提供している.
論理オーディオデバイス
SDL3では, 物理的なデバイス(SoundBlaster 16 Proのような)を開くと, 論理デバイスIDが割り振られ, それをオーディオストリームとバインドできるようになる.
ほとんど全ての場合, APIは論理デバイスを物理デバイスと同じように扱う.
しかし, デバイスを開くたびに新しい論理デバイスが生成されるため, プログラムの異なる箇所(例えばVoIPライブラリ, テキスト読み上げフレームワーク, あるいはSDL上の異なる種類のミキサー)でデバイスを開いていても互いに干渉せず,
それぞれの論理デバイスで別々にミックスした後で1つのバッファに落とし込み, 背後で物理デバイスに供給する.
全ての論理デバイスは必要ならばいつでも追加と削除を行える.
SDLがOSレベルで物理デバイスを開くのは一度だけで, その後の全ての論理デバイスは内部で管理される.
論理デバイスには別の利点もある:
物理デバイスを指定せずにオープンすると, SDLは環境が変わったとき自動的にその論理デバイスを自動的に別のハードウェアに切り替える: ユーザがヘッドホンを挿した, システムのデフォルトが変わった場合などである.
SDLはユーザに再生を途切れさせることなく論理デバイスを正しい物理デバイスに切り替えるためユーザにそのことを意識させることはない.
アプリケーションも求めない限り切り替えを知る必要はない.
簡略化されたオーディオ
単に1つの音声源のみ必要な簡略化されたモデルの場合, SDL_OpenAudioDeviceStreamを使うことができる. これはオーディオデバイスのオープン, オーディオストリームの生成, オープンしたデバイスとストリームのバインド, オーディオデータの獲得を行うコールバックの登録(任意)を1つの関数で行える.
この関数を使う場合, 主要なインターフェースはSDL_AudioStreamで, デバイスのハンドルはほとんど隠される.
この関数で生成したストリームを破棄するとデバイスもクローズされる, ストリームのバインドを変えることができない, などのためである.
この関数を使った場合の別の異なる点は, デバイスは一時停止状態から始まり, 明示的に一時停止を解除する必要があることである.
これはSDL2からの移行を簡単にするためと, 再生が始まる前にアプリケーションがさらにセットアップを必要とする可能性があるためである.
簡略化されていないものの場合, ストリームをデバイスにバインドする前で何も再生されないため, 一時停止解除の状態から始まる.
チャネルレイアウト
SDLに渡すオーディオデータは, 無圧縮の交互に配置されたPCMデータである.
MP3なども自身でデコードすれば渡せるが, 直接渡すことはできない.
データの各チャネルの配置の順序は決められている.
略語:
- FRONT = 正面スピーカー
- FL = 前面左側スピーカー
- FR = 前面右側スピーカー
- FC = 前面正面スピーカー
- BL = 背面左側スピーカー
- BR = 背面右側スピーカー
- SR = サラウンド右スピーカー
- SL = サラウンド左スピーカー
- BC = 背面中央スピーカー
- LFE = 低音スピーカー
次の一覧はメモリ上の配置順で, 例えば"FL, FR"は, 正面左側スピーカーがメモリ上の先で, その次が正面右側, その後はそれを繰り返すことを意味している.
- 1チャネル(モノラル) レイアウト: FRONT
- 2チャネル(ステレオ) レイアウト: FL, FR
- 3チャネル(2.1) レイアウト: FL, FR, LFE
- 4チャネル(クアッド) レイアウト: FL, FR, BL, BR
- 5チャネル(4.1) レイアウト: FL, FR, LFE, BL, BR
- 6チャネル(5.1) レイアウト: FL, FR, FC, LFE, BL, BR (最後の2つはSL, SRの場合もある)
- 7チャネル(6.1) レイアウト: FL, FR, FC, LFE, BC, SL, SR
- 8チャネル(7.1) レイアウト: FL, FR, FC, LFE, BL, BR, SL, SR
この順序はDirectSoundと同じだが, 全ての環境に適用される. SDLは異なる順序の環境でも必要に応じてチャネルを入れ替える.
様々なオーディオ処理の場合のために, SDL_AudioStreamはこの順序を変更するためのチャネルの対応付けを提供できる.
関数
- SDL_AudioDevicePaused - オーディオデバイスが一時停止中かチェックする
- SDL_AudioStreamDevicePaused - オーディオデバイスに関連付けられたオーディオストリームが一時停止中かチェックする
- SDL_BindAudioStream - 1つのオーディオストリームをオーディオデバイスにバインドする
- SDL_BindAudioStreams - オーディオストリームの一覧をオーディオデバイスにバインドする
- SDL_ClearAudioStream - オーディオストリームの保留中のデータを消去する
- SDL_CloseAudioDevice - オーディオデバイスをクローズする
- SDL_ConvertAudioSamples - オーディオデータを別の形式に変換する
- SDL_CreateAudioStream - オーディオストリームを生成する
- SDL_DestroyAudioStream - オーディオストリームを破棄する
- SDL_FlushAudioStream - オーディオストリームにデータ送信の完了を伝える
- SDL_GetAudioDeviceChannelMap - オーディオデバイスの現在のチャネルマップを得る
- SDL_GetAudioDeviceFormat - オーディオデバイスの現在の形式を得る
- SDL_GetAudioDeviceGain - オーディオデバイスのゲインを得る
- SDL_GetAudioDeviceName - オーディオデバイスの人間が読める名前を得る
- SDL_GetAudioDriver - 組み込まれたオーディオドライバの名前を得る
- SDL_GetAudioFormatName - 人間が読めるオーディオ形式の名前を得る
- SDL_GetAudioPlaybackDevices - 現在接続されているオーディオ再生デバイスの一覧を得る
- SDL_GetAudioRecordingDevices - 現在接続されているオーディオ録音デバイスの一覧を得る
- SDL_GetAudioStreamAvailable - オーディオストリームの利用可能な変換/再サンプリングされたバイト数を得る
- SDL_GetAudioStreamData- オーディオストリームから変換/再サンプリングされたデータを得る
- SDL_GetAudioStreamDevice - オーディオストリームにバインドされたデバイスを得る
- SDL_GetAudioStreamFormat - オーディオストリームの形式を得る
- SDL_GetAudioStreamFrequencyRatio - オーディオストリームの周波数の倍率を得る
- SDL_GetAudioStreamGain - オーディオストリームのゲインを得る
- SDL_GetAudioStreamInputChannelMap - オーディオストリームの入力チャネルマップを得る
- SDL_GetAudioStreamOutputChannelMap - オーディオストリームの出力チャネルマップを得る
- SDL_GetAudioStreamProperties - オーディオストリームに関連付けられたプロパティを得る
- SDL_GetAudioStreamQueued - オーディオストリームのキューに入力されたデータのバイト数を得る
- SDL_GetCurrentAudioDriver - 現在のオーディオドライバの名前を得る
- SDL_GetNumAudioDrivers - 組み込まれたオーディオドライバの数を得る
- SDL_GetSilenceValueForFormat - オーディオ形式に合ったmemsetで設定できる無音の値を得る
- SDL_IsAudioDevicePhysical - オーディオデバイスが(論理デバイスではなく)物理デバイスかチェックする
- SDL_IsAudioDevicePlayback - オーディオデバイスが(録音デバイスではなく)再生デバイスかチェックする
- SDL_LoadWAV - WAVファイルを読み込む
- SDL_LoadWAV_IO - WAVファイルをメモリに読み込む
- SDL_LockAudioStream - オーディオストリームをアクセスの直列化のためロックする
- SDL_MixAudio - オーディオデータをミックスする
- SDL_OpenAudioDevice - オーディオデバイスをオープンする
- SDL_OpenAudioDeviceStream - 簡単のため典型的なオーディオの初期化を一度に行う関数
- SDL_PauseAudioDevice - オーディオデバイスの再生を一時停止する
- SDL_PauseAudioStreamDevice - オーディオデバイスに関連付けられたオーディオストリームの再生を一時停止する
- SDL_PutAudioStreamData - ストリームにデータを追加する
- SDL_PutAudioStreamDataNoCopy - ストリームにデータをコピーせずに追加する
- SDL_PutAudioStreamPlanarData - オーディオストリームにチャネルごとの配列に分けられたデータを追加する
- SDL_ResumeAudioDevice - オーディオデバイスの再生の一時停止を解除する
- SDL_ResumeAudioStreamDevice - オーディオデバイスに関連付けられたオーディオストリームの一時停止を解除する
- SDL_SetAudioDeviceGain - オーディオデバイスのゲインを設定する
- SDL_SetAudioIterationCallbacks - オーディオデバイスの処理の繰り返し時に呼ばれるコールバックを設定する
- SDL_SetAudioPostmixCallback - オーディオデバイスにデータが送信される直前に呼ばれるコールバックを設定する
- SDL_SetAudioStreamFormat - オーディオストリームの形式を設定する
- SDL_SetAudioStreamFrequencyRatio - オーディオストリームの周波数の倍率を設定する
- SDL_SetAudioStreamGain - オーディオストリームのゲインを設定する
- SDL_SetAudioStreamGetCallback - オーディオストリームがデータを要求したとき呼ばれるコールバックを設定する
- SDL_SetAudioStreamInputChannelMap - オーディオストリームの入力チャネルマップを設定する
- SDL_SetAudioStreamOutputChannelMap - オーディオストリームの出力チャネルマップを設定する
- SDL_SetAudioStreamPutCallback - オーディオストリームにデータが追加されたとき呼ばれるコールバックを設定する
- SDL_UnbindAudioStream - 1つのオーディオストリームのオーディオデバイスへのバインドを解除する
- SDL_UnbindAudioStreams - 一覧のオーディオストリームのオーディオデバイスへのバインドを解除する
- SDL_UnlockAudioStream - オーディオストリームのアクセスの直列化のためのロックを解除する
型
- SDL_AudioDeviceID - オーディオデバイスインスタンスIDの型
- SDL_AudioIterationCallback - オーディオデバイスの繰り返し処理で呼ばれるコールバックの型
- SDL_AudioPostmixCallback - オーディオデバイスにデータを送信する直前に呼ばれるコールバックの型
- SDL_AudioStream - オーディオストリームを表す不透明型
- SDL_AudioStreamCallback - SDL_AudioStreamからデータを受け取ったとき呼ばれるコールバック関数の型
- SDL_AudioStreamDataCompleteCallback - SDL_PutAudioStreamDataNoCopy()のデータが完了したとき呼ばれるコールバックの型
構造体
- SDL_AudioSpec - オーディオデータの形式を表す構造体
列挙体
- SDL_AudioFormat - オーディオ形式の列挙体
マクロ
- SDL_AUDIO_BITSIZE - オーディオ形式から量子化ビット数を得るマクロ
- SDL_AUDIO_BYTESIZE - オーディオ形式から量子化バイト数を得るマクロ
- SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK - デフォルトの再生デバイスを要求する場合に使用する値のマクロ
- SDL_AUDIO_DEVICE_DEFAULT_RECORDING - デフォルトの録音デバイスを要求する場合に使用する値のマクロ
- SDL_AUDIO_FRAMESIZE - SDL_AudioSpecからオーディオフレームのバイト数を求めるマクロ
- SDL_AUDIO_ISBIGENDIAN - オーディオ形式がビッグエンディアンのデータを扱うものかをチェックするマクロ
- SDL_AUDIO_ISFLOAT - オーディオ形式が浮動小数点データを扱うものかをチェックするマクロ
- SDL_AUDIO_ISINT - オーディオ形式が整数データを扱うものかをチェックするマクロ
- SDL_AUDIO_ISLITTLEENDIAN - オーディオ形式がリトルエンディアンのデータを扱うものかをチェックするマクロ
- SDL_AUDIO_ISSIGNED - オーディオ形式が符号ありのデータを扱うものかをチェックするマクロ
- SDL_AUDIO_ISUNSIGNED - オーディオ形式が符号なしのデータを扱うものかをチェックするマクロ
- SDL_AUDIO_MASK_BIG_ENDIAN - SDL_AudioFormatのビッグエンディアンフラグのマスクのマクロ
- SDL_AUDIO_MASK_BITSIZE - SDL_AudioFormatの量子化ビットサイズのマスクのマクロ
- SDL_AUDIO_MASK_FLOAT - SDL_AudioFormatの浮動小数点のマスクのマクロ
- SDL_AUDIO_MASK_SIGNED - SDL_AudioFormatの符号ありのマスクのマクロ
- SDL_DEFINE_AUDIO_FORMAT - オーディオ形式を定義するマクロ
SDL Wikiへのリンク
SDL3/CategoryAudio - SDL Wiki