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
32
задан eoinoc 17 August 2011 в 06:19
поделиться

4 ответа

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

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)
...
14
ответ дан 27 November 2019 в 20:59
поделиться

Небольшие дополнительные точки:

  1. Убедитесь, что вы скопировали alsa.conf в другое хранилище резервных копий.
  2. Убедитесь, что вы редактируете Sudo при редактировании alsa.conf (например, sudo vi alsa.conf), чтобы вам не нужно было изменять права доступа к файлу alsa.conf

В моем случае это все еще выдавал следующие ошибки ALSA:

  • ALSA lib pcm_route.c: 867: (find_matching_chmap) Не найдено подходящей карты каналов
  • ALSA lib pcm_route.c: 867: (find_matching_chmap) Не найдено подходящей карты каналов
  • ALSA lib pcm_route.c: 867: (find_matching_chmap) Не найдено подходящей карты каналов
  • ALSA lib pcm_route.c: 867: (find_matching_chmap) Не найдено подходящей карты каналов
0
ответ дан 27 November 2019 в 20:59
поделиться

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

0
ответ дан 27 November 2019 в 20:59
поделиться

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

0
ответ дан 27 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: