Как узнать, когда тонгенератор перестал играть
Я встал на колени, чтобы знать, когда мой генератор тона перестал играть.
Я хочу воспроизвести тон dtmf в течение 50 мс, а затем подождать 50, чтобы воспроизвести следующий тон. Я хотел использовать этот код.
private void playtones() {
new Thread(new Runnable() {
public void run() {
for(int i=0 ; i<=19 ; i++){
dtmftone.startTone(savetone.get(i) , 50);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
).start();
}
Сон начинается до того, как тон перестает играть. Как я могу проверить, что тон перестал играть? Или есть лучший способ сделать это?
Спасибо за помощь.
1 ответ
Вы должны использовать метод wait(long millis) ToneGenerator вместо Thread.sleep().
Будьте осторожны, метод не ожидает остановки звука, поэтому вы должны принять во внимание продолжительность звукового сигнала:
int BEEP_DURATION = 50;
int WAITING_DURATION = 50;
...
for (int i = 0; i <= 19; i++) {
dtmftone.startTone(savetone.get(i), BEEP_DURATION);
synchronized(dtmftone) {
dtmftone.wait(BEEP_DURATION + WAITING_DURATION);
}
...
И я не уверен, хотите ли вы подождать 50 мс между двумя звуковыми сигналами. Если вы этого не сделаете, просто удалите "+ WAITING_DURATION"