ユーザ用ツール

サイト用ツール


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

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 無し
sound/start.1398607184.txt.gz · 最終更新: 2014/04/27 22:59 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki