AACファイルチャンクをバッファリングし、それらのチャンクをPCMバイト配列にデコードし、PCMオーディオデータをAudioTrackに書き込むオーディオストリーミングアプリを作成しています。別の曲にスキップしようとすると、AudioTrack.pause()またはAudioTrack.flush()を呼び出すと、次のエラーが発生することがあります。
obtainbuffer timed out -- is cpu pegged?
そして、何が起こるかというと、ほんの一瞬のオーディオが再生され続けます。SDカードからAACファイルのセットを読み取ってみましたが、同じ結果が得られました。私が期待している動作は、オーディオがすぐに停止することです。なぜこれが起こるのか誰かが知っていますか?Android2.3でのオーディオレイテンシの問題かどうか疑問に思います。
編集:AACオーディオにはADTSヘッダーが含まれています。ヘッダーとオーディオペイロードは、私がADTSFrameと呼んでいるものを構成します。これらは一度に1フレームずつデコーダーに供給されます。CレイヤーからJavaレイヤーに返される結果のPCMバイト配列は、AndroidのAudioTrackAPIに送られます。
編集2:今日ネクサス7(Android 4.1 OS)を入手しました。同じAPPをデバイスにロードしました。これらの問題はまったくありませんでした。