У меня есть проблема, когда Kivy использует sdl2 на android и работает нормально, но на linux он использует ffpyplayer, который не делает.
Так что я бы хотел получить Kivy использовать sdl2 и на linux, однако sdl2, похоже, совсем не работает на linux.
$ KIVY_AUDIO=sdl2 python min_audio_example.py
[INFO ] [Audio ] Providers: audio_sdl2 (audio_ffpyplayer ignored)
[CRITICAL] [AudioSDL2 ] Unable to open mixer: b'No such audio device'
Вот минимальный пример, демонстрирующий проблему.
#!/usr/bin/env python
# works with:
# export KIVY_AUDIO=ffpyplayer
# fails with:
# export KIVY_AUDIO=sdl2
from kivy.app import App
from kivy.core.audio import SoundLoader
def playsound(dummy):
sound = SoundLoader.load("440Hz_44100Hz_16bit_05sec.ogg")
if sound:
print("Sound found at %s" % sound.source)
print("Sound is %.3f seconds" % sound.length)
print("sound state", sound.state)
sound.play()
print("sound state", sound.state)
import time
time.sleep(5)
class TestApp(App):
playsound(None)
if __name__ == '__main__':
TestApp().run()
Я думаю, что это может быть связано с тем, как построен kivy wheel, поэтому я попытался
pip uninstall kivy
pip install -U --no-binary=:all: kivy
В этот момент kivy, похоже, вообще не видит sdl2!
$ KIVY_AUDIO=sdl2 python min_audio_example.py
[INFO ] [Audio ] Providers: (audio_ffpyplayer, audio_pygame ignored)
[WARNING] [Audio ] Unable to find a loader for </home/john/data/sight-sing/sightsinger/440Hz1secfadeinandout.ogg>
Теперь он перечисляет audio_ffpyplayer и audio_pygame в качестве провайдеров, и не использует ни одного из-за переменной окружения. (Поставщик pygame тоже кажется неработающим, но ffpyplayer все еще работает)
Кто-нибудь может помочь?