51 votes

PyAudio fonctionne, mais crache des messages d'erreur à chaque fois

J'utilise PyAudio pour enregistrer les entrées du microphone.

Puisque l'enregistrement audio est bon pour moi, dois-je essayer de supprimer simplement ses messages d'erreur ? Ou y aurait-il un moyen de les résoudre ?

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

34voto

Nils Werner Points 3392

Tout ce qui précède est vrai et une bonne solution. Je suis juste venu ici pour suggérer une façon plus agréable de réutiliser le code du gestionnaire d'erreurs :

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)

Après avoir fait cela, vous pouvez réutiliser le gestionnaire d'erreurs en utilisant le contexte noalsaerr :

with noalsaerr():
    p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=1)
...

5voto

Matthias Points 177

Le module sounddevice supprimera ces messages, voir https://github.com/spatialaudio/python-sounddevice/issues/11.

4voto

agf Points 45052

Ceux-ci ressemblent à des messages de débogage normaux car il comprend comment s'exécuter sur votre système. Je ne vois pas pourquoi tu ne devrais pas les réprimer.

Vous pouvez probablement désactiver la détection des serveurs jack, des périphériques Bluetooth, du son surround, etc., mais ce n'est pas nécessaire et vous pourriez tout foutre en l'air. Ne déconne pas avec les choses qui marchent !

1voto

Nikolay Shmyrev Points 8138

Si votre sous-système audio par défaut est Pulseaudio (commun pour Fedora, Ubuntu, Debian), il est préférable de recompiler correctement PyAudio et la bibliothèque C sous-jacente Portaudio avec le support Pulseaudio uniquement sans Jack et autres sous-systèmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X