Kivy: воспроизведение звука на Android без задержек

Я создаю приложение метронома с kivy. Поскольку галочки должны быть точно в точку, я столкнулся с множеством проблем.

Я запланировал события часов как «бесплатные» события:

Config.set('kivy', 'kivy_clock', 'free_all')
Config.write()

Clock.schedule_once_free(self.callback, self.delay)

Если я отслеживаю время обратных вызовов, все они великолепны. Виджеты обновляются в этих обратных вызовах, и они как раз на месте.

Но если я воспроизвожу звук в начале обратного вызова, он каждый раз выполняется с разными задержками. Таким образом, звук не относится к предполагаемому удару в минуту.

Разные Sound-загрузчики ведут себя по-разному: «SoundPygame» не имеет задержки, но не может использоваться для Android (отсутствует поддержка pygame) Некиви-модуль "воспроизведение звука" прекрасно работает, но его нельзя использовать с билдозером из-за отсутствия модуля "ги". «SoundSDL2» используется по умолчанию и не подходит для этой задачи.

sound_norm = SoundPygame(source='sounds/tick.wav')

def callback(self, dt):
    self.sound_norm.play()

Есть ли способ воспроизвести звук на Android с помощью kivy без задержек на основе событий?

Это мой первый вопрос здесь, поэтому, пожалуйста, извините меня, если я задал что-то неправильно или мне нужно улучшить свой вопрос. С наилучшими пожеланиями!

1
0
477
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование Pyjnius решило проблему. Теперь у меня есть код, зависящий от платформы. Для Android:

from jnius import autoclass

MediaPlayer = autoclass('android.media.MediaPlayer')
mPlayer_norm = MediaPlayer()
mPlayer_norm.setDataSource(SOUND_NORM)
mPlayer_norm.prepare()

позже я могу воспроизвести звук в обратном вызове:

self.sound_norm.play()

Таким образом, нет заметной задержки, поэтому это работает для меня.

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