Progreso JdeRobot - Semana 2 (14/09 - 18/09)
Esta semana nos encargamos de dos objetivos principales: intentar reconocer y reproducir sonido en una terminal de Linux y la creación de dos programas, servidor y cliente, que se envían datos por WebSockets.
1. Reconocer y Reproducir Sonido en Linux
Al principio de la semana probé el repositorio Dictate. Me dio algunos errores, pero al final lo terminé configurando, aunque no lo probé del todo.
Luego, probamos de otra manera. Simplemente a través de líneas de comandos, conseguimos grabar audio y reproducirlo por terminal sin problema. Para ello, utilizamos la librería ffmpeg, que nos permite justamente esto, grabar y reproducir fácilmente audio por terminal. Además, también usé Pulse Audio Utils para acceder a los dispositivos de entrada de audio de Linux.
Comandos importantes
Grabar audio:
1
ffmpeg -f pulse -i default -t 5 audio.wav
-f pulse: controlador o formato para leer la entrada-i default: qué dispositivo usar;defaultes el micrófono principal (se detecta como micrófono porque antes vapulse, que es de grabación)-t 5: graba durante 5 segundos-y: sobreescribe el archivo si ya existeCtrl + C: detiene la grabación manualmente
Reproducir audio sin pantalla:
1
ffplay -nodisp -autoexit audio.wav
Micrófonos y entradas de audio:
1
pacmd list-sources
2. Programa servidor y cliente
Estuve trabajando en el programa servidor y cliente que usa WebSockets para enviar audio entre ellos. Lo primero que hice fue investigar un poco más sobre websockets y practicando código haciendo algún programa pequeño.
Cuando pude enviar los datos perfectamente (por ahora solo mensajes de texto), me puse a investigar cómo se podían enviar datos de audio crudo y cómo obtenerlos desde el navegador.
Usando las APIs getUserMedia y MediaRecorder conseguí capturar el audio del micrófono desde el index.html. getUserMedia pide permiso al usuario para acceder al micrófono y devuelve un MediaStream: un objeto que representa el flujo de audio, pero por sí solo no se puede guardar ni enviar. Para esto último, se usa MediaRecorder, al que se le pasa el MediaStream como entrada. Este objeto es el que graba, codifica (a .webm) y finalmente envía los datos binarios a través del WebSocket.
En el servidor (Python, con websockets), se encarga de recibir los datos y guardarlos en archivo con extensión .webm.
Se puede probar en este repo en GitHub (audio_websocket).
Planes para la Siguiente Semana
- Explorar e incorporar
audio-inal programa. Las muestras de audio que se envían por WebSocket tienen que pasar por una red neuronal que las transcriba a texto.