Kivy:立即在Android上播放声音

时间:2019-05-27 11:46:09

标签: android python audio kivy buildozer

我正在用Kivy创建节拍器应用程序。由于滴答需要准确,我遇到了很多问题。

我将时钟事件设置为“免费”事件:

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

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

如果我跟踪回调的时间,它们都很棒。 这些回调中的窗口小部件已更新,它们就可以使用。

但是,如果我在回调的开始播放声音,则每次执行都会有不同的延迟。因此声音与预期的bpm无关。

不同的声音加载器具有不同的行为: “ SoundPygame”没有延迟,但不能用于android(缺少对pygame的支持) 非奇特的模块“播放声音”效果很好,但由于缺少模块“ gi”而不能与buildozer一起使用。 默认情况下使用“ SoundSDL2”,不适用于此任务。

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

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

有没有办法在基于事件的延迟下在kivy上在android上播放声音?

这是我的第一个问题,因此,如果我提出的问题有误或需要改进我的问题,请原谅。 最好的问候!

1 个答案:

答案 0 :(得分:0)

使用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()

这种方式没有明显的延迟,因此对我有用。

相关问题