Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Can';在Pyglet中播放音频时听不到声音(Raspberry Pi 4B,Raspbian)_Python 3.x_Linux_Audio_Raspberry Pi_Pyglet - Fatal编程技术网

Python 3.x Can';在Pyglet中播放音频时听不到声音(Raspberry Pi 4B,Raspbian)

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

我在安装了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 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
  • 然后,我按照指南中的说明安装了pyglet:
    sudopip3安装--升级pyglet
    。安装过程中没有出现任何错误
  • 我知道,默认情况下,Raspberry-Pi通常通过HDMI端口而不是A/V端口输出音频。因此,我使用
    sudo-raspi-config
    进入raspi配置,进入高级选项->音频。选择了正确的选项(在我的情况下是
    1耳机
    ).我通过在Raspberry Pi上播放几段youtube视频和音频文件来检查我的耳机是否播放良好
  • 然后,我通过在pythonshell中使用
    import-pyglet
    导入pyglet来检查pyglet是否工作,它工作正常,没有任何警告或错误
  • 我启动了这里提供的示例程序:。为此,我下载了repo并移动到适当的目录(通过
    cd
    命令)并写道:
    sudo python3 soundspace.py
    。简要介绍一下,该程序包含4种乐器,可以用鼠标在房间里拖动。在这样做时,您从每种乐器听到的音频会根据这些乐器的位置和方向以及您在小游戏中的虚拟位置而变化。T程序执行时,终端上没有显示任何错误,但我听不到任何声音。当我试图移动对象时,程序冻结,但终端上没有显示错误。
  • 因为我对这个复杂的程序最不感兴趣,所以我开始创建我自己的简单程序,它将播放一个wav文件(在有人说wav文件不兼容之前,源于Pyglet的开发者repo本身),参考:。下面是代码片段:
  • 根据文档,如果我没有错的话,这应该是播放馈送到源的wav文件。程序似乎运行时没有出现终端显示的任何错误。但是我没有听到程序的任何音频输出。

  • 我也在
    pyglet.media.Player()
    上弄乱了一点,但观察结果相同:终端没有错误,但也没有音频
  • 关于如何解决这个问题,有什么建议吗?请注意,我更喜欢使用Pyglet,因为这是唯一一个空间/双耳/位置音频Python包,它几乎可以在不破坏我的操作系统的情况下正常工作,所以最好是其他建议与这个包有点一致,而不是完全不同。

    我试着用其他OpenAL Python库进行实验,这个很好用

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

    因为我没时间了。我试着用其他OpenAL Python库进行实验,这一个很好


    编辑:实际的问题不是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()