Kivy:立即在 android 上播放声音

Kivy: play sound on android without delay

我正在用 kivy 创建一个节拍器应用程序。因为在很多问题中,刻度线需要准确地在我 运行 点上。

我将时钟事件安排为 "free" 事件:

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

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

如果我跟踪回调的时间,它们都很棒。 小部件在这些回调中更新,它们恰到好处。

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

不同的声音加载器有不同的行为: "SoundPygame" 没有延迟但不能用于 android(缺少对 pygame 的支持) 非 kivy 模块 "play sound" 工作得很好,但由于缺少模块 "gi" 而不能与 buildozer 一起使用。 "SoundSDL2" 默认使用,不适用于此任务。

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

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

有没有什么方法可以在 android 上使用 kivy 播放声音而不需要基于事件的延迟?

这是我的第一个问题,所以如果我问错了什么或者需要改进我的问题,请原谅。 此致!

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

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