ユーザ用ツール

サイト用ツール


sound:start

文書の過去の版を表示しています。


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 が必要になります。

Android NDK の OpenSL ES ではすべての API が使えるわけではなく、Caps 等対応していない Interface も多数あります。 反対に Android 向けに単純化した、専用の API も用意されています。 Android 4.0 からは OpenMAX に対応しており、OpenSL ES は事実上 OpenMAX の一部として動作しています。

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 です。 上位 API として Linux, Windows でも利用可能。

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 無し

OpenMAX

OpenSL に対する DirectShow のような位置づけ。 オーディオだけでなく Video を含めた Multi media API となっています。

API 構造は OpenSL と同一で、COM のように Object から必要な Interface を取り出して呼び出します。 オーディオ部分は OpenSL と重複しますが、名前が違うだけで API の使い方も命令も同一です。 内部構造的にも OpenMAX と OpenSL の実装は、部分的に共有されているようです。

OpenSL ES 同様、Android NDK では Android 独自の拡張があります。

sound/start.1398623633.txt.gz · 最終更新: 2014/04/28 03:33 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki