在 Pyglet 中播放音频时听不到声音(Raspberry Pi 4B,Raspbian)

Can't hear sound when audio is being played in Pyglet (Raspberry Pi 4B, Raspbian)

我运行正在 Raspberry Pi 上安装 Raspbian 的最新版本 Python 2.7 和 3.7。对于一个项目,我需要在 Python 中实现一些 spatial/binaural 音频文件播放功能,而 Pyglet(版本 1.5.6)(https://pypi.org/project/pyglet/, https://github.com/pyglet/pyglet)似乎是最简单且依赖最少的选项。但是,我无法通过耳机听到音频输出。这是我所做的:

  1. 已安装的 pyglet 依赖项: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-program-options-devpython3-numpy
  2. 然后我按照指南中的说明安装了 pyglet:sudo pip3 install --upgrade pyglet。安装继续进行,没有任何错误。
  3. 我知道默认情况下,Raspberry Pi 通常通过 HDMI 端口而不是 A/V 端口输出音频。所以我使用 sudo raspi-config 进入 raspi-config,进入高级选项 -> 音频。选择了正确的选项(在我的例子中 1 Headphones)。我通过在 Raspberry Pi 本身上播放几个 youtube 视频和音频文件来检查音频是否通过我的耳机正常播放。
  4. 然后我通过在 python shell 中导入带有 import pyglet 的 pyglet 来检查 pyglet 是否正常工作,它工作正常,没有任何警告或错误。
  5. 我启动了此处提供的示例程序:https://github.com/pyglet/pyglet/tree/master/examples/soundspace. To do so, I downloaded the repo https://github.com/pyglet/pyglet 并移动到正确的目录(通过 cd 命令)并写入:sudo python3 soundspace.py。简要概述一下,该程序包含 4 种可以用鼠标在房间内拖动的乐器。这样做时,您从每种乐器听到的音频会根据这些乐器的位置和方向以及您在迷你游戏中的虚拟位置而变化。 程序执行时终端没有显示任何错误,但我听不到任何声音。当我尝试移动对象时,程序冻结但终端中没有显示错误。
  6. 因为我最不关心复杂的程序,所以我继续创建我自己的简单程序来播放 wav 文件(在有人说 wav 文件不兼容之前来自 Pyglet 的开发人员 repo 本身 https://github.com/pyglet/pyglet/tree/master/examples/soundspace), reference from: https://pyglet.readthedocs.io/en/latest/programming_guide/media.html . 这是代码片段:
import pyglet
pyglet.options['search_local_libs'] = True
pyglet.options['audio'] = ('openal')
source = pyglet.media.load('Bass.wav', streaming=False)
source.play()

根据文档,如果我没记错的话,这应该可以播放提供给源的 wav 文件。 该程序似乎 运行 没有在终端中显示任何错误。但是我没有听到程序的任何音频输出。

  1. 我也对 pyglet.media.Player() 搞砸了一点,但同样的观察结果仍然存在:终端没有错误,但也没有音频。

关于如何解决这个问题有什么建议吗?请注意,我更愿意使用 Pyglet,因为这是唯一的 spatial/binaural/positional audio Python 包,它在不破坏我的 OS 的情况下几乎可以很好地工作,所以如果有替代方案最好建议与这个包有点内联,而不是完全不同。

https://github.com/NicklasTegner/PyAL 由于我没时间。我尝试使用其他 OpenAL Python 库进行试验,这个库运行良好。

编辑:实际问题不在于 Pyglet,而在于 PulseAudio,它与 ALSA 冲突。我通过连接外部 USB 声卡解决了这个问题,并且音频工作正常(使用 HRTF 和所有)。