私は、JLayer ライブラリを使用して MP3 ファイルをデコードし (オーディオ サンプルにアクセスする必要があります)、それを再生するために AudioTrack オブジェクトを使用する Android アプリケーションに取り組んでいます。私はこのようなものを持っています:
int timeMarker = 0;
int timeStep = 5000;
while (!isCancelled()) {
outSignalBuffer = decode(fileToPlay.getPath(), timeMarker, timeStep, bufferSize);
audioTrack.write(outSignalBuffer, 0, outSignalBuffer.length);
//publishProgress(outSignalBuffer);
timeMarker += timeStep;
}
このコードは、AsyncTask として作成されたカスタム プレーヤーに配置されます。一般に、サウンド ファイルが聞こえるため、デコードと書き込みの方法は問題なく機能します。問題は、サウンドが定期的に 5 秒 (timeStep = 5000 ms) ごとにジャークすることです。ご覧のとおり、audioTrack.write(...) は非同期タスクをブロックするため、Decode メソッドの結果を待機するたびに Steps が発生するたびに短い一時停止が発生します。
outSignalBuffer を正しく配信してデコーダーからメソッドを記述し、スムーズな audioTrack プレーヤーを取得するための最善の方法について何かアドバイスはありますか?