Kivy: проигрывать звук на андроиде без задержки - PullRequest
1 голос
/ 27 мая 2019

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

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

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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 29 мая 2019

Использование 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()

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

...