0

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をデバイスにロードしました。これらの問題はまったくありませんでした。

4

1 に答える 1

0

サンプルレートについては可能性が高いです。お使いのデバイスの1つは、使用されたサンプルレートuをサポートしている可能性がありますが、他のデバイスはサポートしていません。これをチェックしてください。私は同じ問題を抱えていました、それはサンプルレートについてでした。44.1kHz(44100)を使用して、もう一度やり直してください。

于 2012-12-22T16:44:54.933 に答える