Python 3.x Can';在Pyglet中播放音频时听不到声音(Raspberry Pi 4B,Raspbian)
我在安装了Python 2.7和3.7的Raspberry Pi上运行最新版本的Raspbian。对于一个项目,我需要用Python实现一些空间/双耳音频文件播放功能,Pyglet(1.5.6版)(,)似乎是最简单的选项,依赖性最少。但是,我无法通过耳机听到音频输出。以下是我所做的:Python 3.x Can';在Pyglet中播放音频时听不到声音(Raspberry Pi 4B,Raspbian),python-3.x,linux,audio,raspberry-pi,pyglet,Python 3.x,Linux,Audio,Raspberry Pi,Pyglet,我在安装了Python 2.7和3.7的Raspberry Pi上运行最新版本的Raspbian。对于一个项目,我需要用Python实现一些空间/双耳音频文件播放功能,Pyglet(1.5.6版)(,)似乎是最简单的选项,依赖性最少。但是,我无法通过耳机听到音频输出。以下是我所做的: 已安装的pyglet依赖项:sudo apt get install ffmpeg libopenal1 libopenal dev python3-pil.imagetk python3 pil python3
sudo apt get install ffmpeg libopenal1 libopenal dev python3-pil.imagetk python3 pil python3 matplotlib python3 scipy gstreamer1.0-alsa gstreamer1.0-python3-plugin-loader
(根据以前的程序,系统还安装了cmake、python3 opencv libopencv dev libusb-1.0-0-dev、libboost程序选项dev
和python3 numpy
)sudopip3安装--升级pyglet
。安装过程中没有出现任何错误sudo-raspi-config
进入raspi配置,进入高级选项->音频。选择了正确的选项(在我的情况下是1耳机
).我通过在Raspberry Pi上播放几段youtube视频和音频文件来检查我的耳机是否播放良好import-pyglet
导入pyglet来检查pyglet是否工作,它工作正常,没有任何警告或错误cd
命令)并写道:sudo python3 soundspace.py
。简要介绍一下,该程序包含4种乐器,可以用鼠标在房间里拖动。在这样做时,您从每种乐器听到的音频会根据这些乐器的位置和方向以及您在小游戏中的虚拟位置而变化。T程序执行时,终端上没有显示任何错误,但我听不到任何声音。当我试图移动对象时,程序冻结,但终端上没有显示错误。pyglet.media.Player()
上弄乱了一点,但观察结果相同:终端没有错误,但也没有音频编辑:实际的问题不是Pyglet,而是PulseAudio,它与ALSA冲突。我通过连接一个外部USB声卡解决了问题,并且音频工作正常(使用HRTFs和all).试着运行
alsoft conf
并将声音驱动程序切换到oss
,看看这是否有什么不同。然后,我的最后一个建议是改用它,它的效果会好得多。我明白了,我的一个建议是,如果您只需要音频,就切换库,因为Pyglet是OpenGL wrapp呃,在某种程度上,它做的主要事情是图形(虽然有音频支持)。我想我在这里也有一些线索。但我会看看所描述的问题,看看我是否可以复制它,你在帖子中放了很多细节,所以应该很容易:)我可能需要几周的时间来获得它的空闲时间,因此,如果这解决了问题,那么现在请将您的答案标记为正确:)我不确定Pyglet-OpenAL集成与PyAl和OpenAL的内部有什么区别。但不管出于什么原因,PyAl接缝都能正常工作。因此,我将在Pyglet的源代码中挖掘更多内容(因为我试图对源代码做出越来越多的贡献)。但是,这也需要一点时间。您是否可以尝试添加:pyglet.app.run()
,因为这对于处理输入和输出缓冲区至关重要。(我忽略了这一点,官方discord服务器上的友好人士指出):)试着运行alsoft conf
,然后将声音驱动程序切换到oss
,看看这是否有什么不同。然后,我最后的建议是改用它,它的效果会好得多。我明白了,我的一个建议是,如果您只需要音频,就可以切换库,因为Pyglet是一个OpenGL包装器,它的主要功能是图形(尽管有音频支持)。我想我这里也有一些线索。但是我会看看上面所描述的问题,看看我是否能复制它,你在帖子里已经写了很多细节,所以应该很容易:)我可能需要几周的时间才能有空,所以现在就把你的答案标记为正确,如果这解决了问题:)我不知道
import pyglet
pyglet.options['search_local_libs'] = True
pyglet.options['audio'] = ('openal')
source = pyglet.media.load('Bass.wav', streaming=False)
source.play()