PortAudio 在 Debian/VirtualBox 上似乎被破坏

PortAudio 在 Debian/VirtualBox 上似乎被破坏

我在 Windows 7 主机上的 VirtualBox 5.1.30 中运行 Debian 9.2.1。我想在项目中使用 PortAudio 库,以便它可以在多个平台上使用,但即使使用它自己的示例程序,我也无法让它运行。

全新安装并更新 Debian 后,我安装了该portaudio19-dev软件包并paex_sine.c从 PortAudio 网站上的当前源发行版中获取。它编译得很好(gcc paex_sine.c -lportaudio -lm),但是当我运行它时,我遇到了很多错误:

ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib setup.c:547:(add_elem) Cannot obtain info for CTL elem (MIXER,'IEC958 Playback Default',0,0,0): No such file or directory
ALSA lib setup.c:547:(add_elem) Cannot obtain info for CTL elem (MIXER,'IEC958 Playback Default',0,0,0): No such file or directory
ALSA lib setup.c:547:(add_elem) Cannot obtain info for CTL elem (MIXER,'IEC958 Playback Default',0,0,0): No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred
ALSA lib pcm.c:8306:(snd_pcm_recover) underrun occurred
...

音频本身非常“不稳定”并且失真,我用自己编写的示例/测试应用程序得到了类似的结果。看起来 PortAudio 的回调循环正在尽可能快地运行,而不是等到缓冲区(几乎)空时才请求更多数据。 (播放 WAV 文件aplay工作正常,因此我有理由确定 VM 配置正确)。

我的虚拟机中的 PortAudio 安装自我报告为 version PortAudio V19.6.0-devel, revision 396fe4b6699ae929d3a685b3ef8a7e97396139a4,这似乎是其网站上的最新稳定版本,但已经有一年了。这是一个已修复的已知问题吗?与 VirtualBox 的一些奇怪的交互?或者我应该在 PortAudio 问题跟踪器上写一个错误?

编辑:我刚刚在使用 Debian 9.2 Live CD 的物理机上尝试过。我的两个测试(paex_sine示例和我的 WAV 播放器)都能够成功完成播放,但在初始化 PortAudio 时仍然遇到一些错误:

ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave

这向我表明 VirtualBox 的音频“硬件”存在一些问题,导致 PortAudio 完全搞砸了,但我在 Raspberry Pi 3 上使用板载音频时也遇到了类似的问题(“断断续续”、播放失真)。现在我不确定是向 PortAudio 团队还是 RPi 人员提出这个问题,而且我还想知道如何消除所有这些“未知 PCM”错误。

相关内容