目次 - 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
- 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
- SDL_IsAudioDevicePhysical
- SDL_IsAudioDevicePlayback
- SDL_LoadWAV
- SDL_LoadWAV_IO
- 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
- SDL_UnbindAudioStreams
- SDL_UnlockAudioStream
型
- SDL_AudioDeviceID
- SDL_AudioIterationCallback
- SDL_AudioPostmixCallback
- SDL_AudioStream
- SDL_AudioStreamCallback
- SDL_AudioStreamDataCompleteCallback
構造体
- SDL_AudioSpec
列挙体
- SDL_AudioFormat
マクロ
- SDL_AUDIO_BITSIZE
- SDL_AUDIO_BYTESIZE
- SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK
- SDL_AUDIO_DEVICE_DEFAULT_RECORDING
- SDL_AUDIO_FRAMESIZE
- SDL_AUDIO_ISBIGENDIAN
- SDL_AUDIO_ISFLOAT
- SDL_AUDIO_ISINT
- SDL_AUDIO_ISLITTLEENDIAN
- SDL_AUDIO_ISSIGNED
- SDL_AUDIO_ISUNSIGNED
- SDL_AUDIO_MASK_BIG_ENDIAN
- SDL_AUDIO_MASK_BITSIZE
- SDL_AUDIO_MASK_FLOAT
- SDL_AUDIO_MASK_SIGNED
- SDL_DEFINE_AUDIO_FORMAT
SDL Wikiへのリンク
SDL3/CategoryAudio - SDL Wiki