您可以尝试清理ALSA配置,例如,
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rearALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfeALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
是由于
/usr/share/alsa/alsa.conf:
pcm.rear cards.pcm.rearpcm.center_lfe cards.pcm.center_lfepcm.side cards.pcm.side
一旦您注释掉这些行,那些错误消息就会消失。您可能还需要检查
~/.asoundrc和
/etc/asound.conf。
就是说,其中一些消息表明您的配置有问题,尽管它们并没有引起任何实际问题。我不建议您清理
alsa.conf,因为它最初来自ALSA,所以在更新alsa-
lib时可能会覆盖它。
在Python中有一种抑制消息的方法,下面是一个示例代码:
#!/usr/bin/env pythonfrom ctypes import *import pyaudio# From alsa-lib Git 3fd4ab9be0db7c7430ebd258f2717a976381715d# $ grep -rn snd_lib_error_handler_t# include/error.h:59:typedef void (*snd_lib_error_handler_t)(const char *file, int line, const char *function, int err, const char *fmt, ...) ;# Define our error handler typeERROR_HANDLER_FUNC = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p)def py_error_handler(filename, line, function, err, fmt): print 'messages are yummy'c_error_handler = ERROR_HANDLER_FUNC(py_error_handler)asound = cdll.LoadLibrary('libasound.so')# Set error handlerasound.snd_lib_error_set_handler(c_error_handler)# Initialize PyAudiop = pyaudio.PyAudio()p.terminate()print '-'*40# Reset to default error handlerasound.snd_lib_error_set_handler(None)# Re-initializep = pyaudio.PyAudio()p.terminate()我计算机的输出:
messages are yummymessages are yummymessages are yummymessages are yummymessages are yummymessages are yummy----------------------------------------ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slaveALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rearALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfeALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.sideALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback streamALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
这些消息是通过alsa-lib而不是PyAudio或PortAudio打印的。该代码直接使用alsa-
lib
snd_lib_error_set_handler函数设置一个错误处理程序
py_error_handler,您可以使用它删除任何消息。
我检查了其他Python
ALSA绑定,pyalsa和PyAlsaAudio,它们不支持设置错误处理程序。但是,PortAudio上存在问题,以前似乎所有ALSA错误消息都已被抑制。



