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 slave Cannot connect to server socket err = No such file or directory Cannot connect to server socket jack server is not running or cannot be started 

5 Solutions collect form web for “PyAudio работает, но каждый раз выводит сообщения об ошибках”

Вы можете попытаться очистить конфигурацию 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 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() 

Выход с моего компьютера:

 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 , который вы можете использовать для удаления любого сообщения.

Я проверил другие привязки ALSA Python, pyalsa и PyAlsaAudio, они не поддерживают установку обработчика ошибок. Однако в PortAudio есть проблема , все сообщения об ошибках ALSA, похоже, были подавлены раньше.

Все вышесказанное верно и хорошее решение. Я просто пришел сюда, чтобы предложить лучший способ повторного использования кода обработчика ошибок:

 from ctypes import * from contextlib import contextmanager import 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): pass c_error_handler = ERROR_HANDLER_FUNC(py_error_handler) @contextmanager def 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) ... 

Они выглядят как обычные отладочные сообщения, поскольку они определяют, как работать в вашей системе. Я не вижу причин, по которым вы не должны их подавлять.

Вероятно, вы можете отключить обнаружение серверов-разъемов, устройств Bluetooth, объемного звука и т. Д., Но это не обязательно, и вы можете повредить ситуацию. Не возитесь с вещами, которые работают!

Модуль sounddevice будет подавлять эти сообщения, см. https://github.com/spatialaudio/python-sounddevice/issues/11 .

Если ваша подсистема звука по умолчанию – Pulseaudio (обычная для Fedora, Ubuntu, Debian), лучше правильно перекомпилировать PyAudio и базовую библиотеку C Portaudio с поддержкой Pulseaudio только без Jack и других подсистем.

  • pyaudio поможет воспроизвести файл
  • Сообщения об ошибках PyAudio alsa
  • Как удалить всплывающие подсказки из данных Concatented Sound в PyAudio
  • Получить образец аудио как число с плавающей точкой из pyaudio-stream
  • как преобразовать волновой файл в амплитуду поплавка
  • Обнаружение касания с помощью pyaudio из живого микрофона
  • PyAudio IOError: нет устройства ввода по умолчанию
  • Список всех аудиоустройств с pyaudio Python (привязка к порталу)
  •  
    Interesting Posts for Van-Lav

    Ленивый оценочный питон

    Как конвертировать midi-файлы в нажатие клавиш (в Python)?

    Преобразование numpy unit8 необработанного массива непосредственно в float32

    Как перейти к подвыборке из scipy.sparse.csr.csr_matrix и списка

    Декораторы Python в классах

    Интересный «getElementById () принимает ровно 1 аргумент (2 данный)», иногда это происходит. Может кто-нибудь объяснить это?

    Неожиданная ошибка NoReverseMatch при использовании include () в шаблонах URL-адресов

    GAE: код python для проверки, находится ли я на dev_appserver или развернут в appspot

    Вычислить значение RGB для диапазона значений для создания карты тепла

    Python + MySQLdb странная проблема

    Объединить элементы списков, если какое-то условие

    Встраивание веб-оболочки Python (Werkzeug?)

    Чтение RSS-каналов: какие агрегаторы делают то, что я не

    В Python, как я могу получить доступ к «статическим» переменным класса в методах класса

    Python Попытка перезаписать ошибку ячейки

    Python - лучший язык программирования в мире.