【问题标题】:How can I get Kivy to use sdl2 on Linux?如何让 Kivy 在 Linux 上使用 sdl2?
【发布时间】:2020-02-06 13:39:02
【问题描述】:

我遇到了一个问题,Kivy 在 android 上使用 sdl2,并且工作正常,但在 linux 上它使用 ffpyplayer,但事实并非如此。

所以我想让 Kivy 在 linux 上也使用 sdl2,但是 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轮的构建方式有关,所以我尝试了

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 仍然有效)

谁能帮忙?

【问题讨论】:

    标签: python kivy sdl-2


    【解决方案1】:

    这是 kivy 轮式构造,我尝试的修复几乎是正确的。

    问题是,如果 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
    

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2017-01-04
      • 2020-06-11
      • 2016-03-14
      • 1970-01-01
      相关资源
      最近更新 更多