Per la mia app, ho bisogno di registrare l'audio da MIC su un telefono Android e inviarlo tramite TCP all'altro telefono Android, dove deve essere riprodotto.Android: streaming audio tramite socket TCP
Sto usando AudioRecord
e AudioTrack
classe. Funziona perfettamente con un file: consente di scrivere audio nel file utilizzando DataOutputStream
e di leggerlo utilizzando DataInputStream
.
Tuttavia, se ottengo lo stesso flusso da un socket anziché da un file e provo a scriverlo, ottengo un'eccezione.
Non riesco a capire cosa potrebbe andare storto. Qualsiasi aiuto sarebbe molto apprezzato.
MODIFICA: il problema è lo stesso anche se provo con dimensioni di buffer più grandi (65535 byte, 160000 byte).
Questo è il codice:
Recorder:
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);
}
Il DataOutputStream sopra è ottenuto come:
BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff);
La prego di dare un'occhiata e fatemi sapere cosa si tratta che potrei fare di sbagliato qui?
Grazie,
Sei riuscito a inviare il file audio ad altri dispositivi? – B770