Android用のメトロノームを作成しようとしています。SoundPoolを使用して300BPMでビープ音を鳴らすようにこのコードを記述しましたが、ビートがスキップされる傾向があり、ラグが発生します。私は調査しましたが、見つけたすべての答えが私の問題を解決するわけではありません。これは特に、bpmカウントを高速化しようとしたり、4分の1(2倍の時間)ではなく8分音符を使用したりする場合に発生します。誰かがこれをできるだけ正確にする正しい方向に私を導くことができますか?遅延/ビートスキップは受け入れられません。ありがとう!!
final SoundPool sndPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
final int sndHigh = sndPool.load(this, R.raw.high, 1);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Thread th = new Thread(new Runnable(){
public void run() {
while(true){
sndPool.play(sndHigh, 1f, 1f, 1, 0, 1f);
//Log.d("asd", "beep");
LockSupport.parkNanos(((240000/300)/4)*1000000); //300bpm
}
}
});
th.setPriority(Thread.MAX_PRIORITY);
th.start();