80 lines
2.5 KiB
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;
|
|
}
|
|
|
|
} |