Как узнать, когда тонгенератор перестал играть

Я встал на колени, чтобы знать, когда мой генератор тона перестал играть.

Я хочу воспроизвести тон 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"

Другие вопросы по тегам