с помощью таймера является плохой идеей для этого, там я это сказал ...
Вопрос заключается в том, что таймер имеет дрейф и срабатывает несколько миллисекунд позже. Попробуйте простой тест, в котором у вас есть таймер, который выполняется каждые 500 мс, а затем сравните счет getTimer()
. То, что я обнаружил в своих экспериментах, что таймер постоянно выключен, и похоже, что он не сам исправляет. Я пробовал использовать самонастраивающийся таймер, который меняет время стрельбы на основе разности getTimer()
с момента последнего прогона, но он по-прежнему не является надежным. и в любое время при загрузке вашего процессора таймер будет отключен.
Правильный способ справиться с этим - использовать данные byteArray в качестве источника звука. На основе расчета разрешения выборки вы можете заранее заполнить поток данными, и звук будет воспроизводиться вовремя, в значительной степени гарантированный. Я не зашел так далеко, чтобы создать то, что делает это сам. Но есть несколько библиотек, которые вы можете использовать, которые могут вам помочь.
Моей две верхней уменьшенная библиотека SiON и tonfall
вы можете увидеть образец Sion здесь http://wonderfl.net/c/qf4b
и tonfall примера в http://tonematrix.audiotool.com/
В то время как я не пробовал их на андроид, я думаю, либо должен работать
звучит для меня, как есть дефект дизайна. Таймер блокируется только при раздувании вызова. –
Не могли бы вы рассказать об этом, пожалуйста? Таймер в основном не очень точен, он оставляет разный размер пробелов между каждым «битом» –
Недавно я построил что-то подобное. Я также использовал класс таймера, и он был OKAY, но не велик. Воспроизведение звуков - очень дорогостоящая операция, и в сочетании с минимальными анимациями мой фильм иногда «пропускает» удары или добавляет незначительные задержки. Я не мог найти способ улучшить его. Обязательно отлаживайте с помощью getTimer(), чтобы точно измерять задержки. – lostPixels