Как я могу заставить Kivy использовать sdl2 на Linux? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть проблема, когда 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 все еще работает)

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 07 февраля 2020

Это сборка колеса, и моя попытка исправить была почти правильной.

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

Итак, на debian установите зависимости kivy:

(https://kivy.org/doc/stable/installation/installation-linux-venvs.html#installation -in-venv )

sudo apt-get install python-pip build-essential git python python-dev ffmpeg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev zlib1g-dev

затем:

pip uninstall kivy

затем установите без использования сломанного предварительно собранного колеса

pip install --no-binary kivy kivy
...