文書の過去の版を表示しています。
Sound API
Platform | API |
---|---|
Android NDK | OpenSL ES / OpenMAX |
iOS | OpenAL |
WindowsPhone | XAudio2 |
Windows | DirectSound / DirectShow / XAudio2 |
Mac OS X | OpenAL (Core Audio) |
Linux | ALSA |
API | Wave | Stream | 3D |
---|---|---|---|
Android NDK OpenSL ES | Y | Y | |
Android NDK OpenMAX AL | |||
iOS OpenAL | Y | N | Y |
Windows DirectSound | Y | N | Y |
Windows DirectShow | Y |
OpenSL ES
Windows の COM Object によく似た API 構造を持っています。 そのため、名称とは裏腹に使い方は OpenGL よりも DirectX (DirectShow) に似ています。
COM と異なるのは、Object と Interface が完全に分かれていること。 インスタンスを持っているのは Object だけで、Interface は Release (Destroy) する必要がありません。
Interface は C言語から呼び出せる構造になっています。 lpVtbl を経由しないので実装に依存しませんが、C++ からの呼び出しでも第一引数が必要となっています。
再生するデータが Buffer Object を持たない構造です。 PCM などのサウンドデータは自分でメモリ管理します。
再生には Player が必要です。 再生するデータのパラメータが異なる場合は、新たな Player が必要になります。
Object | Create Object | Interface | QueryInterface | ||
---|---|---|---|---|---|
Buffer Object | 無し | – | – | – | – |
Player Object | あり | SLObjectItf | EngineObject→CreateAudioPlayer() | SLPlayItf | PlayerObject→GetInterface( SL_IID_PLAYER ) |
OpenAL
名称通り OpenGL によく似ています。
操作対象(つまり this 相当)は第一引数で渡すので、OpenGL のようにいちいち Bind する必要がありません。 その分、OpenGL よりも明確でより扱いやすい構造となっています。
Buffer を作り、Player (Source) 経由で再生を行います。 非常にわかりやすい API です。
Object | Create Object | Interface | QueryInterface | ||
---|---|---|---|---|---|
Buffer Object | あり | ALuint | alGenBuffers() | ||
Player Object | あり | ALuint | alGenSources() |
DirectSound 8
あくまで Buffer が主であって Player Object がありません。 再生機能は Buffer のメソッドのひとつです。
DirectX7 以前の Direct3D レンダリングが、Surface に対するメソッドとして実装されていたことによく似ています。
そのため同じ Buffer のデータを多重で鳴らすことができず、 ゲームでは必要に応じて Buffer を複製することになります。
Object | Create Object | Interface | QueryInterface | ||
---|---|---|---|---|---|
Buffer Object | あり | IDirectSoundBuffer | DS→CreateSoundBuffer() | ||
Player Object | 無し | – | – |