У меня есть сценарий, где у меня есть некоторые данные синхронизации, которые я получаю из файла MIDI. Когда нужно прослушивать MIDI-ноту, мне нужно отправить команду поверх UDP. В принципе, у меня есть инструкции, которые говорят «сыграйте в заметку A, подождите 125 мс, играйте в заметку B, подождите 300 мс, играйте в ноту C ...», и каждый раз, когда я «играю в ноту X», мне нужно отправлять данные по UDP. Я пробовал использовать как TimerTask, так и простой поток с циклом, который проверяет системное время и вычисляет, сколько времени прошло, и решить, следует ли играть ноту на основе этого, но оба метода, похоже, имеют проблемы с синхронизацией. TimerTask не работает точно на указанном интервале (что указано в документации), поэтому я получаю неустойчивые сообщения. Нить работает лучше, но по-прежнему она иногда икает, потому что другие потоки получают приоритет над ней.Как отправить данные с точным временем в приложении Android?
Есть ли лучший способ отправить эти данные с более точным временем? Есть ли что-то, что я могу использовать, например, интерфейс Clip на Java, который используется для воспроизведения звука?
Любая помощь очень ценится.
Так как приложение, которое воспроизводит аудио, сохраняет правильное время? Когда приложение Android воспроизводит песню из файла, у нее нет таких проблем. Я не говорю, что вы не правы выше, я просто хочу знать, как выполняется воспроизведение звука, несмотря на проблемы, о которых вы говорили. – jteezy14
Не по времени. Он записывает данные файла в память. Затем он сообщает звуковой карте, где находятся данные, а звуковая карта считывает память и обрабатывает ее. Это, конечно, упрощение (полный ответ включает такие вещи, как DMA и переработка буфера), но для воспроизведения реальной музыки он передает ее отдельному аппарату. –