後藤 浩昭(GORRY)です。
本質的には、AudioTrack/SoundPool/OpenSL ESのどれも
大差ありません。遅延の大元は、これらの下位にいる
オーディオデバイスドライバの性能や設定に由来する
ものだからです。
SoundPoolはストレージ型(メモリにサウンドデータを直接
配置してこのエリアをデバイスドライバが扱う)、AudioTrackは
主にストリーミング型(サウンドデータをデバイスドライバへ
動的に送信して扱う)を想定したJavaフレームワークです。
OpenSL ESはこの両方を想定したネイティブ(主にC/C++向け)
フレームワークです。
--
なお、ストリーミングの場合はその性格上、デバイスドライバとは
別にバッファリングが必要になり、これが別に遅延の元となります。
AudioTrackのストリーミングは比較的大きめのバッファを持って
音声の途切れを起こさない方針で作られているためか、遅延は長めに
なります。このバッファサイズはAudioTrack.getMinBufferSize()で
得ることができますが、数十ms~数百msと機種によりかなり
差があります。
OpenSL ESのストリーミングモードは自前でバッファを作成して
遅延量を制御しなければなりません。手許で試した限りでは10ms程度でも
特に問題はありませんでした。この程度になると、ストリーミングの
バッファによる遅延はさほど問題ではなく、デバイスドライバ
レベルの遅延が大きな問題となってきます。
--
ちなみに、これらはAndroidだけでなく、PCでサウンドを扱うときに
おいての一般的な問題です。Windowsなどでも、サウンドドライバに
よっては遅延量(レイテンシ)を設定できたりします。
In message <
NJEOKONKLGEPCBLFHJ...@mui.biglobe.ne.jp>
"RE: Re: [android-group-japan: 25591] MP3の一部分再生がうまくいかない"