Estoy usando PyAudio de registro de entrada del micrófono.

Ya que el audio de la grabación de bien para mí, debo tratar simplemente de reprimir sus mensajes de error? O ¿hay una manera de resolverlas?

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
InformationsquelleAutor eoinoc | 2011-08-17

6 Comentarios

  1. 25

    Puede intentar limpiar su configuración de ALSA, por ejemplo,

    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

    son causados por /usr/share/alsa/alsa.conf:

    pcm.rear cards.pcm.rear
    pcm.center_lfe cards.pcm.center_lfe
    pcm.side cards.pcm.side

    Una vez que el comentario fuera de estas líneas, los mensaje de error se ha ido. Puede que también desee comprobar ~/.asoundrc y /etc/asound.conf.

    Que dijo, algunos de esos mensajes están diciendo que algo está mal en la configuración, a pesar de que no causa ningún problema real. Yo no recomiendo limpiar el alsa.conf, porque es de ALSA originalmente, puede ser sobrescrito al actualizar alsa-lib.

    Hay una manera de suprimir el mensaje en Python, aquí es un ejemplo de código:

    #!/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()

    Un rendimiento de mi equipo:

    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

    Esos mensajes se imprimen por alsa-lib, no PyAudio o PortAudio. El código utiliza directamente alsa-lib snd_lib_error_set_handler función para configurar un controlador de errores py_error_handler, que se puede utilizar para quitar cualquier mensaje.

    He comprobado otros Python ALSA enlaces, pyalsa y PyAlsaAudio, que no admite la configuración de controlador de errores. Sin embargo, hay un problema en PortAudio, todos ALSA mensajes de error que parecía ser suprimida antes.

    • Esto no deshacerse de los mensajes de JACK, ¿verdad?
  2. 13

    Todo lo anterior es verdadero y una buena solución. Sólo he venido aquí para sugerir una mejor manera de volver a utilizar el código de controlador de error:

    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)

    Después de hacer esto usted puede volver a usar el controlador de errores por el uso de la noalsaerr contexto:

    with noalsaerr():
        p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paFloat32, channels=1, rate=44100, output=1)
    ...
    • Eso es definitivamente una solución elegante.
  3. 3

    Aquellos que parecen normales de los mensajes de depuración ya que las cifras de cómo se ejecutan en su sistema. No veo ninguna razón que usted no debe acabar con ellos.

    Usted probablemente puede desactivar la detección de jack servidores, dispositivos bluetooth, sonido envolvente, etc. de alguna manera, pero no es necesario y puede equivocarse. No se metan con cosas que están trabajando!

    • Gracias por el consejo! Mi problema es, la secuencia de comandos muestra el texto necesarios para la grabación. Tan pronto como se golpeó el registro, que el texto básicamente se golpea a cabo de la manera por estos mensajes de depuración.
    • Si tu pregunta es cómo suprimir de ellos, tratar de redirigir el stderr a un archivo. stderr = open(logfile, 'wb') luego sys.stderr = stderr. Déjame saber si funciona.
    • Que parece tener sentido, pero no tiene ningún efecto. Es posible que los mensajes están llegando a través de otro flujo de salida, por ejemplo?
  4. 0

    Si su defecto el subsistema de audio es Pulseaudio (común para Fedora, Ubuntu, Debian), es mejor compilar correctamente PyAudio y subyacentes de la biblioteca C de Portaudio con Pulseaudio sólo admiten sin Jack y los otros subsistemas.

  5. 0

    Pequeños puntos adicionales:

    1. Asegúrese de copiar alsa.conf a otra ubicación de copia de seguridad.
    2. Asegúrese de que usted Sudo el editor, mientras que la edición de alsa.conf (e.g sudo vi alsa.conf), de modo que usted no necesita cambiar los permisos de archivo de alsa.conf

    En mi caso todavía lanzó a cabo las siguientes ALSA errores:

    • ALSA lib pcm_route.c:867:(find_matching_chmap) Encontró ninguna coincidencia de mapa de canales
    • ALSA lib pcm_route.c:867:(find_matching_chmap) Encontró ninguna coincidencia de mapa de canales
    • ALSA lib pcm_route.c:867:(find_matching_chmap) Encontró ninguna coincidencia de mapa de canales
    • ALSA lib pcm_route.c:867:(find_matching_chmap) Encontró ninguna coincidencia de mapa de canales

Dejar respuesta

Please enter your comment!
Please enter your name here