RealTimeTalk/app/src/main/java/com/smarthomies/realtimetalk/utils/SocketAudioRecorder.java

80 lines
2.5 KiB
Java

package com.smarthomies.realtimetalk.utils;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;
import com.smarthomies.realtimetalk.views.activities.CallActivity;
import java.io.IOException;
import java.net.Socket;
import java.util.concurrent.CountDownLatch;
public class SocketAudioRecorder implements Runnable {
private static final String TAG = SocketAudioRecorder.class.getSimpleName();
private static int recBufSize;
private static AudioRecord audioRecord;
private boolean isRecording;
private Socket socket;
private String ip;
private int port;
public SocketAudioRecorder(String ip, int port, int frequency, int channelConfiguration, int audioEncoding) {
this.ip = ip;
this.port = port;
if(audioRecord == null || audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED) {
recBufSize = AudioRecord.getMinBufferSize(frequency, channelConfiguration, audioEncoding);
Log.d(TAG, "MediaStreamClient buffer size: " + recBufSize);
//Log.v(TAG,String.valueOf(AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO , AudioFormat.ENCODING_PCM_16BIT)));
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfiguration, audioEncoding, recBufSize);
}
}
@Override
public void run() {
byte[] buffer = new byte[recBufSize];
try {
socket = new Socket(ip, port);
Log.d(TAG, "Socket open!");
Log.d(TAG, "Socket info: " + socket);
} catch (Exception e) {
e.printStackTrace();
return;
}
audioRecord.startRecording();
Log.d(TAG, "Started recording");
isRecording = true;
while (isRecording) {
int readSize = audioRecord.read(buffer, 0, recBufSize);
Log.d(TAG, "Recorded " + readSize + " bytes");
try {
socket.getOutputStream().write(buffer, 0, readSize);
Log.d(TAG, "Sent " + readSize + " bytes");
} catch (Exception e) {
e.printStackTrace();
break;
}
}
audioRecord.stop();
Log.d(TAG, "Stopped recording!");
try {
socket.close();
Log.d(TAG, "Socket closed!");
} catch (Exception e) {
e.printStackTrace();
}
}
public void stop() {
isRecording = false;
}
}