PyAudio working, but spits out error messages each time
You can try to clean up your ALSA configuration, for example,
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
are caused by /usr/share/alsa/alsa.conf
:
pcm.rear cards.pcm.rear
pcm.center_lfe cards.pcm.center_lfe
pcm.side cards.pcm.side
Once you comment out these lines, those error message will be gone. You may also want to check ~/.asoundrc
and /etc/asound.conf
.
That's said, some of those messages are telling something is wrong in your configuration, though they do not cause any real problem. I do not recommend you clean up the alsa.conf
, because it's from ALSA originally, it may be overwritten when you update alsa-lib.
There is a way to suppress the message in Python, here is a sample code:
#!/usr/bin/env python
from 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 type
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):
print 'messages are yummy'
c_error_handler = ERROR_HANDLER_FUNC(py_error_handler)
asound = cdll.LoadLibrary('libasound.so')
# Set error handler
asound.snd_lib_error_set_handler(c_error_handler)
# Initialize PyAudio
p = pyaudio.PyAudio()
p.terminate()
print '-'*40
# Reset to default error handler
asound.snd_lib_error_set_handler(None)
# Re-initialize
p = pyaudio.PyAudio()
p.terminate()
An output from my computer:
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
Those messages are printed out by alsa-lib, not PyAudio or PortAudio. The code directly uses alsa-lib snd_lib_error_set_handler
function to set an error handler py_error_handler
, which you can use it to drop any message.
I have checked other Python ALSA bindings, pyalsa and PyAlsaAudio, they do not support setting error handler. However, there is an issue on PortAudio, all ALSA error messages seemed to be suppressed before.
PyAudio warnings poluting output
The warning/status messages go to the standard error output (stderr
), while the output of your print()
call goes to the standard output (stdout
).
It should be trivial to separate the two.
If you want to actually suppress the warning/status messages, you can have a look at my answer to the SO-question you were mentioning, or the more verbose answer I've linked to from there.
PyAudio throws warnings on Raspberry Pi
Thanks to the stackoverflow community. I got an link to an older topic, that gives the perfect solution.
- Topic name: "PyAudio working, but spits out error messages each time"
The reason why all these warnings occur and how to handle them with python are explained.
Great thanks!!!
Related Topics
Round to 5 (Or Other Number) in Python
Zip Variable Empty After First Use
Insert a Row to Pandas Dataframe
Remove Punctuation from Unicode Formatted Strings
Appending Pandas Dataframes Generated in a for Loop
How Would I Access Variables from One Class to Another
Recommendations of Python Rest (Web Services) Framework
How to Get My Program to Sleep for 50 Milliseconds
How to Pretty-Print Ascii Tables with Python
Python MySQLdb: Library Not Loaded: Libmysqlclient.18.Dylib
Python Multithreading Wait Till All Threads Finished
Any Way to Modify Locals Dictionary
Importing an Ipynb File from Another Ipynb File
How to Remove Nan Value While Combining Two Column in Panda Data Frame
Choosing a File in Python with Simple Dialog