基本的にタイマーを設定し、2 つのサウンドのセットを次々と再生する小さなアプリがあります。
毎回まったく同時に両方のサウンドを開始したかったので、2 つのタイマーを試しました。開始前に両方のタイマーを設定するために、アプリに500ミリ秒を与えました
Calendar cal = Calendar.getInstance();
Date start = new Date(cal.getTime().getTime() + 500);
timerTask1 = new TimerTask() { //1st timer
@Override
public void run() {
soundManager.playSound(1);
}
};
timer1 = new Timer();
timer1.schedule(timerTask1, start, 550);
timerTask2 = new TimerTask() { //2nd timer
@Override
public void run() {
soundManager.playSound(2);
}
};
timer2 = new Timer();
timer2.schedule(timerTask2, start, 550);
}
soundManager は、このチュートリアルに基づくSoundManagerオブジェクトです。私が行った唯一の変更は、同時に 2 つのサウンドしか再生しないため、使用可能なストリームの数を 20 から 2 に減らしたことです。
今問題。Motorola RAZR でもエミュレーターでも同じ速度で再生されません。アプリが時々遅くなり、ブレーキが必要以上に長くなります。私はそれを起こさせることはできません。ここで何が問題なのですか?
OGG形式の非常に短いサウンドを使用しています
編集:私はいくつかの調査を行いました。2つのアプローチを使用しました。音が発射されるまでのミリ秒の距離を測定していました。リフレッシュ レートは 500 ミリ秒でした。
- 最初のアプローチは TimerTask でした。これは大きな失敗です。それは 300 ミリ秒で開始し、その後絶えず増加し、しばらくすると (2 分) 497 ミリ秒で安定しました。
- 2番目のアプローチは、AsyncTaskのwhileループでした-475から500ミリ秒の出力が得られましたが、これはTimerTaskよりも優れていますが、それでも不正確です
結局、どのアプローチもスムーズにプレイできませんでした。いつもラグがあった