Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 在Docker下没有声音_Python_Docker_Pyaudio_Raspberry Pi4_Portaudio - Fatal编程技术网

Python 在Docker下没有声音

Python 在Docker下没有声音,python,docker,pyaudio,raspberry-pi4,portaudio,Python,Docker,Pyaudio,Raspberry Pi4,Portaudio,我已经建立了一个简单的docker图像,并试图找出为什么PyAudio不会输出任何声音 扬声器测试向耳机插孔输出粉红色噪声 aplay sound.wav也可以工作 python3播放\u wave.py sound.wav挂起,不输出任何声音 play_wave.py是pyaudio软件包附带的一个示例/测试程序 我设置了此测试存储库,以便您可以见证确切的行为: git克隆https://github.com/PaulWieland/pyaudio_test.git cd-pyaudio

我已经建立了一个简单的docker图像,并试图找出为什么PyAudio不会输出任何声音

  • 扬声器测试
    向耳机插孔输出粉红色噪声
  • aplay sound.wav也可以工作
  • python3播放\u wave.py sound.wav
    挂起,不输出任何声音
play_wave.py
是pyaudio软件包附带的一个示例/测试程序

我设置了此测试存储库,以便您可以见证确切的行为:

  • git克隆https://github.com/PaulWieland/pyaudio_test.git
  • cd-pyaudio\u测试
  • docker构建-t paulwieland/pyaudio\u测试。
  • docker-run-it-rm-device/dev/snd-paulwieland/pyaudio\u-test/bin/sh
进入容器后,运行
aplay Front_Center.wav
-音频通过raspberry Pi的耳机插孔播放

现在运行
python3 play.py Front\u Center.wav

在我的情况下,脚本挂起,永远不会结束。我可能会在几分钟后收到一点音频,但它不会正确播放声音

编辑:

这个问题是使用最新的Raspbian操作系统在Raspberry Pi 4上运行PortAudio时的兼容性问题


我现在确信它与Docker或Python无关,因为我也无法得到一个使用portaudio播放wav的简单C程序。

而不是
p=pyaudio.pyaudio()
do
p=pyaudio.init()

我今天取得了一些进展,下面是我尝试的一个有用的答案。Linux上的音频可能会很痛苦,但我今天玩我的pi3(+Raspbian Stretch)时认为这是一个很有希望的线索

正如我几天前在评论中所说,当我用pyaudio播放sound时,我的pi3内容在主机和容器中听起来都很糟糕,但当我用aplay播放sound时,在主机和来宾中听起来都很好。我在主机上安装了一个pulseaudio服务器(默认情况下,大多数非Raspbian Debian都会打包),pyaudio在主机上播放起来相当不错!我也尝试在容器中安装pulseaudio,安装成功,另外我让守护进程启动并运行,但守护进程抱怨无法连接到dbus,在它运行后,aplay播放了声音,但pyaudio没有。然后,我尝试在容器中使用
--system
标志运行pulseaudio(因为容器用户是root,并且后台程序说root应该只使用该标志运行pulseaudio),声音再次响起,但听起来与以前一样糟糕。我会尝试让您的容器与pulseaudio服务器进行通信,不过,这对我来说是个不错的选择

您有两种选择,要么让pulseaudio服务器在来宾系统中运行,要么像正常情况一样在主机上运行一个,并允许容器与之通信,可能还有dbus(抱歉,我不知道如何做到这一点)。我确实知道,如果pulseaudio在我的主机上运行,容器将无法与其通信,因为pyaudio打印了一些无法连接到pulseaudio服务器的消息。后者对我来说是一个很好的选择,因为我可以告诉你,在主机中很容易获得pulseaudio+pyaudio+dbus的已知良好设置,所以在主机中很容易获得pulseaudio+dbus的良好设置,在容器中获得pyaudio的良好设置。值得一试


另一个花絮,值得一提的是——容器中的ALSA配置和我的pi3+raspbian stretch有些不同。alsa.conf文件是不一样的,我认为其他的东西也在发生。我没有深入研究它,因为我实际上没有和您完全相同的问题。

pyaudio
模块没有
init
函数。嗯,有趣的bug。我不能用我的硬件复制它。我在主机上和容器内,在我的amd64笔记本电脑和覆盆子Pi(你说你正在使用)上,按照你的回购协议中的说明进行操作。在笔记本电脑和pi上,我在主机和docker容器中看到相同的行为。在笔记本电脑上,使用aplay和pyaudio听起来不错,但我在使用pyaudio时看到一些警告消息打印到了标准输出。在pi上,使用aplay听起来不错,使用pyaudio听起来更清晰,但是可以识别,并且pyaudio向stdout打印了更多的警告消息。@SaraSinback感谢您的测试。您在Pi上运行的操作系统/版本是什么?Pi是哪一代的?拉斯比拉伸。PCB显示Raspberry Pi 3型号B+。顺便说一句,更多琐事-在笔记本电脑上,我用内置扬声器和耳机插孔测试了-相同的行为(有道理,它们肯定使用相同的DAC)。似乎只有Buster版本的raspbian与RPI4一起工作感谢您的努力!FWIW,我现在已经开始在主机中直接测试PortAudio,以消除与python和docker相关的所有因素。事实证明,在尝试从rpi4上的文件流式传输音频时,PortAudio有这么大的延迟。现在我想弄清楚原因。