首页 > 解决方案 > 尝试从 Raspberry Pi 上的 PyAL(文件描述符处于错误状态)运行 HRTF 示例时出错

问题描述

我正在尝试使用 Raspberry Pi 上的 PyAL 库来试验 HRTF 音频空间化 https://github.com/NicklasTegner/PyAL/tree/master/examples/HRTF

PyAL 依赖于 OpenAL。我已经安装了必要的依赖项sudo apt-get install以确保库正常工作:libopenal-dev libopenal1 libopenal-data libmysofa-dev libmysofa0 libmysofa-utils qt5-default alsa-utils alsa-oss alsaplayer-jack g++ gstreamer1.0-python3-plugin-loader gstreamer1.0-alsa

此外,我使用以下方法安装了 pyglet:sudo pip3 install pyglet

除 HRTF 示例外,所有示例(3D 音频、播放、efx、audiplayer、播放器)均有效。当我尝试运行 HRTF 示例时,出现以下错误: AL lib: (EE) ALCplaybackAlsa_reset: snd_pcm_hw_params(self->pcmHandle, hp) failed: File descriptor in bad state

我知道这是由系统中不存在 PulseAudio 引起的(https://unix.stackexchange.com/questions/467193/error-while-running-the-gstreamer-example-on-development-kit -文件描述符)。所以我安装了 pulseaudio 及其相应的工具(例如pavucontrol使用sudo apt-get install pulseaudio.

安装 pulseaudio 并重新启动后,当我运行该示例时,该示例执行没有错误。但是,我在耳机中听不到任何音频输出。事实上,整个系统的音频输出都停止了。我确保音频输出来自耳机,sudo raspi-config并且 alsamixer 确实将 pulseaudio 显示为音频驱动程序(安装时)。

我从互联网上得到相互矛盾的信息。上面的链接建议使用 pulseaudio 来减轻错误(这是正确的),而这个链接:https ://www.youtube.com/watch?v=stvc7ehCWUU和https://raspberrypi.stackexchange.com/questions/1621/ no-sound-output-in-vlc说要删除pulseaudio(这也是正确的,因为它将我的音频带回来,但我无法运行HRTF示例)。

有什么建议么?

标签: python-3.xalsaopenalpulseaudioraspberry-pi4

解决方案


这很奇怪,但我通过连接廉价的外部 USB 声卡(https://www.amazon.com/gp/product/B00IRVQ0F8/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)解决了这个问题。显然,ALSA 保持对 3.5 毫米插孔的控制,并且不会将控制权交给该插孔的 Pulseaudio。最简单的解决方案是使用外部声卡。


推荐阅读