猿问
下载APP

PyAudio正在工作,但每次都会发出错误消息

PyAudio正在工作,但每次都会发出错误消息

我正在使用PyAudio来录制麦克风输入。

由于音频录制对我来说很好,我应该尝试简单地抑制其错误消息吗?还是有办法解决它们?

ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slaveCannot connect to server socket err = No such file or directoryCannot connect to server socket
jack server is not running or cannot be started


智慧大石
浏览 70回答 3
3回答

蛊毒传说

您可以尝试清理ALSA配置,例如,ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side是由/usr/share/alsa/alsa.conf:pcm.rear cards.pcm.rear pcm.center_lfe cards.pcm.center_lfe pcm.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, ...) /* __attribute__ ((format (printf, 5, 6))) */;# 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 yummy messages are yummy messages are yummy messages are yummy messages are yummy messages are yummy----------------------------------------ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream ALSA 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错误消息似乎都被抑制了。

一只甜甜圈

所有这些都是真实的,也是一个很好的解决方案。我刚来这里建议一种更好的方法来重用错误处理程序代码:from ctypes import *from contextlib import contextmanagerimport pyaudio ERROR_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):     passc_error_handler = ERROR_HANDLER_FUNC(py_error_handler)@contextmanagerdef noalsaerr():     asound = cdll.LoadLibrary('libasound.so')     asound.snd_lib_error_set_handler(c_error_handler)     yield     asound.snd_lib_error_set_handler(None)执行此操作后,您可以使用noalsaerr上下文重新使用错误处理程序:with noalsaerr():     p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=1)...

莫回无

这些看起来像普通的调试消息,因为它计算出如何在您的系统上运行。我认为你不应该压制它们。您可以jack以某种方式关闭服务器,蓝牙设备,环绕声等的检测,但这不是必要的,您可能会搞砸了。不要乱用有用的东西!
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答