在 Raspberry Pi 上尝试从 PyAL(文件描述符处于错误状态)中 运行 HRTF 示例时出错

Error while trying to run HRTF example from PyAL (File descriptor in bad state) on Raspberry Pi

我正在尝试使用 PyAL 库在 Raspberry Pi 上试验 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-file-descriptor)。所以我安装了 pulseaudio 及其相应的工具(例如 pavucontrol 使用 sudo apt-get install pulseaudio.

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

我从 Internet 获得的信息相互矛盾。上面的 link 建议使用 pulseaudio 来减轻错误(这是正确的),而这个 link: https://www.youtube.com/watch?v=stvc7ehCWUU and https://raspberrypi.stackexchange.com/questions/1621/no-sound-output-in-vlc 说删除 pulseaudio (这在它恢复我的音频的意义上也是正确的但我不能 运行 HRTF 示例)。

有什么建议吗?

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