首页 > 解决方案 > 非确定性 pyaudio/ALSA 失败

问题描述

我测试了一些能发出声音的普通 python 代码,特别是来自另一个问题的代码

当我从命令行运行该代码时python code.py,它会发出这一系列直接来自 ALSA 的消息。到目前为止,这并不罕见,据我所知,它忽略了一些不可用的设备,这些设备以某种方式存在于所涉及的 ALSA 配置文件中,并在发现它不存在后跳过使用 jack:

ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm_route.c:869:(find_matching_chmap) Found no matching channel map
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave

但是,当我将声音的持续时间修改为例如 50 或 100 毫秒时,通过扬声器实际听到的持续时间在不同的运行中明显不同。因为我希望编程一些特殊的哔哔声和东西,所以这是一个问题。它仍然是不确定的,在重新启动后也是如此。

您将如何确定听到的实际声音持续时间变化的原因?

伴随的症状:每次运行时都不会发出有关“无法打开从属设备”的消息,有时会发出,有时不会发出。有些事情是不确定的,我想知道你是否会花一天时间来清理复杂的 ALSA 配置,或者以非常不同的方式处理这个问题。

无论如何,复制play_sound调用以在第一个声音之后添加另一个声音:

play_sound("sine", 150, 0.8, 100)
play_sound("sine", 130, 0.8, 200)

我得到一个稍微不同的控制台输出:

attempt to connect to server failed
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:869:(find_matching_chmap) Found no matching channel map
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
connect(2) call to /dev/shm/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave

我没有手动修改 ALSA 配置,它是一个 Ubuntu 20.04 系统。也许我使用了错误的 linux 发行版来让它开箱即用地运行得非常顺利。

您将如何解决为什么声音的持续时间是不确定的?

标签: pyaudioalsa

解决方案


推荐阅读