Доброго времени суток.
Не так давно начал изучать Java. Сейчас пишу синтезатор под Андроид, захотелось реализовать в нем арпеджиатор. Арпеджиатор работает в отдельном потоке следующим образом:
1. Сканируем массив нот.
2. Если нота не равна нулю — включаем ее.
3. Засыпаем на ее длительность.
4. Выключаем ноту.
5. Засыпаем на интервал между нотами.
6. Переходим к следующей ноте.
В целом все работает, однако при использовании Sleep(), Timer() или nanoTime() длительность нот/интервалов непостоянна и изменяется в пределах +/- 20 мс, что, конечно, заметно на слух.
while(hasTouch)
{
for (int note : sequence)
{
if (note != 0)
{
playNote(note);
Thread.sleep(duration);
stopNote(note);
Thread.sleep(duration);
}
}
}
Каким образом можно добиться постоянных и точных интервалов? Какие еще есть способы приостановить выполнение кода на заданное время?