Для моего приложения мне нужно записать звук с MIC на телефон Android и отправить его по TCP на другой телефон Android, где его необходимо воспроизвести.
Я использую AudioRecord
и AudioTrack
класс. Это прекрасно работает с файлом - записывайте аудио в файл, используя DataOutputStream
, и читайте из него, используя DataInputStream
.
Однако, если я получаю тот же поток из сокета, а не из файла, и пытаюсь записать в него, я получаю исключение.
Я затрудняюсь понять, что может быть не так. Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: проблема та же, даже если я пытаюсь с большим размером буфера (65535 байт, 160000 байт).
Это код:
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);
}
DataOutputStream выше получается как:
BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff);
Не могли бы вы взглянуть и дать мне знать, что я могу здесь делать неправильно?
Спасибо