viernes, 8 de marzo de 2013

Entrada 2: Entrada de audio en la RPi - S23/02/2013


Para la realización de la práctica necesitamos disponer de una entrada de audio a la Raspberry, puesto que vamos a tener que realizar grabaciones de voz del usuario para realizar el reconocimiento de su idioma. La Raspberry Pi no incluye ninguna entrada de audio de serie, por lo que hay que buscar una forma alternativa de realizar la captura del audio.

Las distintas alternativas que barajamos son: utilizar un micrófono o cámara USB, grabar el sonido mediante un dispositivo Android y posteriormente transmitirlo a la Raspberry Pi, o, como última opción, utilizar los puertos GPIO y un conversor A/D para capturar la señal de un micrófono con conector mini-jack.

Puesto que la idea es llegar a tener un sistema empotrado, la primera opción que hemos probado ha sido la de utilizar un micrófono USB. Hemos usado un micrófono como los que vienen con el juego SingStar para la PlayStation 2, que tienen un conector USB. Cuando lo conectamos a la Raspberry, no sabíamos si lo había reconocido como dispositivo de entrada de audio, por lo que (después de investigar un rato) descubrimos el comando alsamixer, que muestra el control de volumen de linux.

Aquí es donde vimos que sí que había reconocido el micrófono y que lo había reconocido como dispositivo 1. Para configurar el micrófono (volumen, mute, etc) utilizamos el comando amixer de la siguiente forma

$ amixer -c 1 sset Mic,0 100%,100% unmute cap

Con esto activamos la captura de sonido de la tarjeta (-c) 1 y ponemos el volumen al 100% (en ambos canales, aunque sólo usaremos uno de ellos). Una vez configurado el micrófono, pasamos a la grabación. Desde la terminal se puede grabar usando el comando arecord. Este comando permite elegir el formato del archivo grabado. 

$ arecord -D hw:1,0 -f S16_LE -c 1 -r 8000 -B 900000 "ruta_fichero/nombre_fichero.wav"

Con la opción -D seleccionamos la tarjeta 1, con -f seleccionamos una codificación Little Endian de 16 bits con signo por muestra, con la opción -c 1 indicamos que la grabación es mono, y con -r 8000 elegimos la frecuencia de muestreo a 8 kHz. Con estas opciones se producía un error por desbordamiento del buffer, por lo que además tuvimos que añadir la opción -B, que fuimos calibrando hasta tomar un valor de 900000 con el cuál no lanza errores.

3 comentarios:

  1. He probado esto pero no graba nada, he abierto el alsamixer y me dice que no hay dispositivo de entrada, y si lo cambio entonces no hay dispositivo de salida.

    ResponderEliminar
    Respuestas
    1. Acabo de probarlo y a mí me funciona (he vuelto a probar por si habían cambiado los drivers o alguna configuración).
      ¿Estás usando el mismo micrófono (el del SingStar de la PS2)? Sé que algunos micrófonos usb dan problemas o no funcionan, con el de la PS2 debería funcionar.
      Como aclaraciones (por si acaso), para ver los dispositivos, en alsamixer, hay que darle a F6. Y en la ruta de fichero no hay que poner las comillas.

      Eliminar
    2. He estado un tiempo liado y lo he probado ahora otra vez y si que funciona. Muchas gracias y perdona por el mareo.

      Saludos.

      Eliminar