ELO-330: Programación de Sistemas
Tarea 4: Chat de audio
Objetivos:
En esta tarea usted aplicará: comunicación entre procesos remotos
usando C y Java, manejo de hebras en ambos lenguajes, acceso
sincronizado de variables en Java,
integración de servicios provistos por otras aplicaciones.
Introducción
En esta tarea dos procesos permitirán que usuarios tengan una comunicación de audio sencilla a través de la red.
Nombre: audioMix: programa Java, mezclador de flujos de audio
audioTerminal: programa en C, capturador y reproductor de audio
Sintaxis: audioMix <puerto>
audioTerminal <server> <puerto>
puerto: es el número de puerto del servidio de mezcla de flujos de audio en el servidor audioMix.
server: es un nombre o IP del computador donde corre audioMix.
Descripción
Un servidor Java hará mezclará flujos de audio
provenientes de diferentes clientes. Un diseño basado en hebras de este
servidor le permiten atender sin mayor latencia a todos los clientes y recibir nuevos clientes.
Clientes corriendo en el computador de cada usuario toman el flujo de
audio proveniente del micrófono y lo envía al servidor. Una hebra
independiente del cliente recibe un flujo desde el servidor y los
reproduce en la salida de audio del computador (parlante).
La comunicación entre cliente y servidor es vía TCP. Desde su
inicio el cliente captura regularmente paquetes (por ejemplo de 320
muestras de audio) desde el micrófono y las envía hacia el servidor. El
servidor por su parte lee paquetes desde los clientes, y envía a cada
cliente un único flujo de datos con todos los flujos de los clientes
excepto el del cliente destinatario de esa mezcla. Use codificación
lineal de 16 bits para las muestras de audio, así la mezcla puede
realizarse a través de una suma normal de enteros de 16 bits.
Tanto el programa cliente como el servidor concluyen con
control-C. El servidor sigue operando en la medida que tenga clientes
que atender, no impportanto que algunos se retiren y otros ingresen.
Esta aplicación no ofrece mecanismos para cambios de
sensibilidad del micrófono ni volumen de parlante. Tampoco hay
detección de silencio. La aplicación supone que tantoo el cliente como
servidor son ejecutados en arquitectura little-endian (Intel
convention).
Evaluación de la Tarea y qué entregar:
revisar las instrucciones para
entregar y evaluar su tarea.
Recomendaciones
* En cliente use arecord y aplay para hacer captura y reproducción. Como formato puede probar con arecord --format=S16_LE -t raw
* En una primera etapa se recomienda desarrollar el cliente y un
servidor sencillo (sólo atiende a dos clientes y lo que llegue por uno
lo envía a otro), luego usted puede extender al servidor para manejar
múltiples clientes.
* Para probar usted puede generar un archivo de audio con arecord y
luego usarlo en una versión especial del cliente para no estar hablando
en cada una de sus pruebas.
* Usted puede corrrer varias instancias de su cliente, usando archivos
de audio como entrada, para probar todo en un único computador.
* Pruebe su solución final corrriendo audioMix en aragorn y algunos clientes en uno o varios computadores.
* Si más aclaraciones son requeridas, con todo gusto lo atenderé.