2010-05-01 13 views
16

Para mi aplicación, necesito grabar audio de MIC en un teléfono Android y enviarlo a través de TCP al otro teléfono Android, donde debe reproducirse.Android: Transmisión de audio a través de sockets TCP

Estoy usando AudioRecord y clase. Esto funciona muy bien con un archivo: escriba audio en el archivo usando DataOutputStream, y léalo usando DataInputStream.

Sin embargo, si obtengo la misma transmisión de un socket en lugar de File, y intento escribir en ella, obtengo una excepción.

No entiendo qué podría estar yendo mal. Cualquier ayuda sería muy apreciada.

EDITAR: El problema es el mismo incluso si trato con tamaños de búfer más grandes (65535 bytes, 160000 bytes).

Este es el código:

Grabadora:

int bufferSize = AudioRecord.getMinBufferSize(11025, , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 

AudioRecord recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); 

byte[] tempBuffer = new byte[bufferSize]; 

recordInstance.startRecording(); 

while (/*isRecording*/) { 
     bufferRead = recordInstance.read(tempBuffer, 0, bufferSize); 
     dataOutputStreamInstance.write(tempBuffer); 
} 

El DataOutputStream se obtuvo anteriormente como:

BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream 
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff); 

Podría por favor una mirada, y quiero saber qué es lo que podría estar haciendo mal aquí?

Gracias,

+0

¿Se las arregló para enviar el archivo de audio a otros dispositivos? – B770

Respuesta

8

Lo hice funcionar, con algo de ayuda, y solo parcialmente.

Comencé con el código en http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html, cambié las transmisiones de File a las transmisiones de Socket, y cambié el isAvailable() a if (inputStream.read (byteArray)! = -1).

La transmisión en vivo de audio a través de TCP está sucediendo ahora.

Sin embargo,

Todo lo que escucho en el otro extremo es el ruido, y ahora estoy a la caza de conjunto correcto de parámetros para Audiorecorder y AudioTrack - la frecuencia, canal de configuración y codificación, fuente de audio, etc.

Si tienes alguna idea al respecto, házmelo saber.

Gracias,

EDITAR:

Fue un error estúpido de mi parte. Además de todo lo que he dicho anteriormente, use inputStream en el lado del reproductor y outputStream en el lado de la grabadora, y arrays de bytes en lugar de cortos, y funcionará.:)

+0

Aunque estoy cavando un hilo viejo ... ¿Puedes poner tu código (cambios que hayas hecho)? –

+0

Hola Chaitanya, ¿Cómo hiciste con el mismo código? No puedo hacer transmisión en vivo de audio a través de TCP. ¿Puedes guiarme? – iMOBDEV

1

sin conocer la excepción específica que está recibiendo, es difícil saber exactamente lo que está mal. También ayudaría a ver el código que está utilizando para crear out1 (es decir, el código del socket).

Es posible que desee prestar atención a la cantidad de datos leídos en recordInstance.read(); es posible que no obtenga un total de bufferSize -datos de datos formados, por lo que debe tener cuidado únicamente de escribir los bytes 0 en bufferRead-1 en su socket de salida.

+0

Muchas gracias por la respuesta. – Chaitanya

Cuestiones relacionadas