目次 - 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なども自身でデコードすれば渡せるが, 直接渡すことはできない. データの各チャネルの配置の順序は決められている.

略語:

次の一覧はメモリ上の配置順で, 例えば"FL, FR"は, 正面左側スピーカーがメモリ上の先で, その次が正面右側, その後はそれを繰り返すことを意味している.

この順序はDirectSoundと同じだが, 全ての環境に適用される. SDLは異なる順序の環境でも必要に応じてチャネルを入れ替える.

様々なオーディオ処理の場合のために, SDL_AudioStreamはこの順序を変更するためのチャネルの対応付けを提供できる.

関数

  1. SDL_AudioDevicePaused
  2. SDL_AudioStreamDevicePaused
  3. SDL_BindAudioStream
  4. SDL_BindAudioStreams
  5. SDL_ClearAudioStream
  6. SDL_CloseAudioDevice
  7. SDL_ConvertAudioSamples
  8. SDL_CreateAudioStream
  9. SDL_DestroyAudioStream
  10. SDL_FlushAudioStream
  11. SDL_GetAudioDeviceChannelMap
  12. SDL_GetAudioDeviceFormat
  13. SDL_GetAudioDeviceGain
  14. SDL_GetAudioDeviceName
  15. SDL_GetAudioDriver
  16. SDL_GetAudioFormatName
  17. SDL_GetAudioPlaybackDevices
  18. SDL_GetAudioRecordingDevices
  19. SDL_GetAudioStreamAvailable
  20. SDL_GetAudioStreamData
  21. SDL_GetAudioStreamDevice
  22. SDL_GetAudioStreamFormat
  23. SDL_GetAudioStreamFrequencyRatio
  24. SDL_GetAudioStreamGain
  25. SDL_GetAudioStreamInputChannelMap
  26. SDL_GetAudioStreamOutputChannelMap
  27. SDL_GetAudioStreamProperties
  28. SDL_GetAudioStreamQueued
  29. SDL_GetCurrentAudioDriver
  30. SDL_GetNumAudioDrivers
  31. SDL_GetSilenceValueForFormat
  32. SDL_IsAudioDevicePhysical
  33. SDL_IsAudioDevicePlayback
  34. SDL_LoadWAV
  35. SDL_LoadWAV_IO
  36. SDL_LockAudioStream
  37. SDL_MixAudio
  38. SDL_OpenAudioDevice
  39. SDL_OpenAudioDeviceStream
  40. SDL_PauseAudioDevice
  41. SDL_PauseAudioStreamDevice
  42. SDL_PutAudioStreamData
  43. SDL_PutAudioStreamDataNoCopy
  44. SDL_PutAudioStreamPlanarData
  45. SDL_ResumeAudioDevice
  46. SDL_ResumeAudioStreamDevice
  47. SDL_SetAudioDeviceGain
  48. SDL_SetAudioIterationCallbacks
  49. SDL_SetAudioPostmixCallback
  50. SDL_SetAudioStreamFormat
  51. SDL_SetAudioStreamFrequencyRatio
  52. SDL_SetAudioStreamGain
  53. SDL_SetAudioStreamGetCallback
  54. SDL_SetAudioStreamInputChannelMap
  55. SDL_SetAudioStreamOutputChannelMap
  56. SDL_SetAudioStreamPutCallback
  57. SDL_UnbindAudioStream
  58. SDL_UnbindAudioStreams
  59. SDL_UnlockAudioStream

  1. SDL_AudioDeviceID
  2. SDL_AudioIterationCallback
  3. SDL_AudioPostmixCallback
  4. SDL_AudioStream
  5. SDL_AudioStreamCallback
  6. SDL_AudioStreamDataCompleteCallback

構造体

  1. SDL_AudioSpec

列挙体

  1. SDL_AudioFormat

マクロ

  1. SDL_AUDIO_BITSIZE
  2. SDL_AUDIO_BYTESIZE
  3. SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK
  4. SDL_AUDIO_DEVICE_DEFAULT_RECORDING
  5. SDL_AUDIO_FRAMESIZE
  6. SDL_AUDIO_ISBIGENDIAN
  7. SDL_AUDIO_ISFLOAT
  8. SDL_AUDIO_ISINT
  9. SDL_AUDIO_ISLITTLEENDIAN
  10. SDL_AUDIO_ISSIGNED
  11. SDL_AUDIO_ISUNSIGNED
  12. SDL_AUDIO_MASK_BIG_ENDIAN
  13. SDL_AUDIO_MASK_BITSIZE
  14. SDL_AUDIO_MASK_FLOAT
  15. SDL_AUDIO_MASK_SIGNED
  16. SDL_DEFINE_AUDIO_FORMAT

SDL Wikiへのリンク

SDL3/CategoryAudio - SDL Wiki