私はメトロノームのようなAndroidアプリケーションを作成しました。 実際には、nミリ秒ごとにビープ音を鳴らしたいと思います。 私はこのためにMediaPlayer
とタイマーを使用します。Androidのビープ音がnミリ秒ごとに鳴ります
私のコードは次のようである:
Soloution 1:私はこのコードを実行すると
start_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Timer timer = new Timer("MetronomeTimer", true);
TimerTask tone = new TimerTask() {
@Override
public void run() {
//Log
DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss:SS");
Date date = new Date();
j++;
Log.i("Beep", df.format(date) + "_____" + j);
//Play sound
music = MediaPlayer.create(MainActivity.this, R.raw.beep);
music.start();
}
};
timer.scheduleAtFixedRate(tone, 500, 500); // every 500 ms
}
});
、すべてがOKです。しかし、15回のループの後、ログの行は正常に動作しますが、サウンドはミュートされます。そして時には15、または20ログごとに、サウンドが再生され、停止します。
溶液2:TimerTask
のうち
music = MediaPlayer.create(MainActivity.this, R.raw.beep);
(このような):
私はこのラインを移動
start_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
music = MediaPlayer.create(MainActivity.this, R.raw.beep);
Timer timer = new Timer("MetronomeTimer", true);
TimerTask tone = new TimerTask() {
@Override
public void run() {
//Log
DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss:SS");
Date date = new Date();
j++;
Log.i("Beep", df.format(date) + "_____" + j);
//Play sound
music.start();
}
};
timer.scheduleAtFixedRate(tone, 500, 500); // every 500 ms
}
});
このコードは繰り返し500ミリ秒までもOKです。周期時間が400秒または300ミリ秒に減少すると、2つのログごとに1つの音が鳴ります。
正常に動作するこのコードを修復する方法。
あなたのビープ音はあなたの時間間隔よりも長くなるかもしれません。 – user1506104
いいえ、ビープ音は約50 ms、間隔は300です。 – Tavousi