RTP y RTSP con Java, parte 2: Gestión del hardware

Antes de empezar, vamos a investigar cómo podemos coger audio del micrófono y enivar audio al altavoz del ordenador. Lo haremos analizando directamente unos fragmentos de código, que es la mejor forma de ver éstas cosas icon smile RTP y RTSP con Java, parte 2: Gestión del hardware

Recibiendo audio desde el micro

Usaremos el código siguiente para recibir desde el micro. En los comentarios se explican los detalles de las operaciones que se realizan y los recursos que se utilizan.

// Especificamos el formato
AudioFormat formato=new AudioFormat(this.sampleRate, 16, 1, true, true);

// Accedemos a la línea de entrada desde el AudioSystem
DataLine.Info info = new DataLine.Info(TargetDataLine.class, formato);

if (AudioSystem.isLineSupported(info))
{
	// Cogemos y abrimos la línea de entrada
	TargetDataLine lineaEntrada =
		(TargetDataLine) AudioSystem.getLine(info);
	lineaEntrada.open(formato);
	lineaEntrada.start();

	// Creamos el buffer intermedio
	int tamBuffer=lineaEntrada.getBufferSize()/5;
	byte[] buffer=new byte[tamBuffer];

	while(!this.finalizar)
	{
		// Miramos si hay algo que leer
		int bytesDisp = lineaEntrada.available();

		if(bytesDisp > 0)
		{
			tamBufferActual =
				(bytesDisp > tamBuffer ? tamBuffer : bytesDisp);
			lineaEntrada.read(this.buffer, 0, tamBufferActual);
		}
	}

	// Cerramos el stream
	lineaEntrada.close();
}

Enviando audio al altavoz

Usaremos el código siguiente para recibir desde el micro. De nuevo, en los comentarios se explican los detalles de las operaciones que se realizan y los recursos que se utilizan.

// Especificamos el formato
AudioFormat formato=new AudioFormat(this.sampleRate, 16, 1, true, true);

// Accedemos a la línea de salida desde el AudioSystem
DataLine.Info info = new DataLine.Info(SourceDataLine.class, formato);

if (AudioSystem.isLineSupported(info))
{
	// Cogemos y abrimos la línea de salida
	lineaSalida = (SourceDataLine) AudioSystem.getLine(info);
	lineaSalida.open(formato);
	lineaSalida.start();

	// Creamos el buffer intermedio
	int tamBuffer=lineaSalida.getBufferSize()/5;
	byte[] buffer=new byte[tamBuffer];

	while(!this.finalizar)
	{
		lineaSalida.write(this.buffer, 0, tamBufferActual);
	}

	// Cerramos el stream
	lineaSalida.close();
}

Conclusión

Como podemos ver, con las clases que están en javax.sound.sampled.* podemos acceder a el hardware de sonido de forma sencilla. Con los mixers que nos ofrece podremos acceder a diferentes micros y dispositivos de salida, y con hebras y buffers intermedios podremos convertir, guardar, emitir, etc… cualquier tipo de audio capturaro, simultáneamente.

Próximamente veremos como codificar esos datos de audio capturados en paquetes RTSP, y como recibir datos de un equipo remoto y volcarlos a través del altavoz convertidos en audio.


Disclaimer: Las imágenes mostradas en ésta página web se utilizan sólamente con propósitos ilustrativos, y son propiedad de sus respectivos autores (cuando es aplicable).
Hijo de Blog es un producto del Dr. SeROne

Los contenidos se ofrecen bajo una licencia de Creative Commons
Attribution-NonCommercial-NoDerivs 3.0 Unported

salvo que se indique lo contrario

Licencia de Creative Commons