package com.kfb.kfbv1.media; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack; import android.media.MediaRecorder; import android.util.Log; import com.kfb.kfbv1.model.KfbGate; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.URL; import java.net.UnknownHostException; public class KfbINtercom { private KfbGate tablet; AudioRecord recorder; public byte[] buffer; public static DatagramSocket socket; private AudioTrack speaker; private int port=50005; private int sampleRate = 8000; //How much will be ideal? private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; private boolean status = true; public void setTable(KfbGate aTablet) { tablet = aTablet; } public void startReceiving() { Thread receiveThread = new Thread(new Runnable() { @Override public void run() { try { DatagramSocket socket = new DatagramSocket(50005); Log.d("VR", "Socket Created"); byte[] buffer = new byte[256]; //minimum buffer size. need to be careful. might cause problems. try setting manually if any problems faced int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); speaker = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, minBufSize, AudioTrack.MODE_STREAM); speaker.play(); while (status == true) { try { DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); Log.d("VR", "Packet Received"); //reading content from packet buffer = packet.getData(); Log.d("VR", "Packet data read into buffer"); //sending data to the Audiotrack obj i.e. speaker speaker.write(buffer, 0, minBufSize); Log.d("VR", "Writing buffer content to speaker"); } catch (IOException e) { Log.e("VR", "IOException"); } } } catch (SocketException e) { Log.e("VR", "SocketException"); } } }); receiveThread.start(); } public void startStreaming() { Thread streamThread = new Thread(new Runnable() { @Override public void run() { try { int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); DatagramSocket socket = new DatagramSocket(); Log.d("VS", "Socket Created"); byte[] buffer = new byte[minBufSize]; Log.d("VS","Buffer created of size " + minBufSize); DatagramPacket packet; // URL u = new URL(tablet.getmAdres()); final InetAddress destination = InetAddress.getByName(tablet.getmAdres()); Log.d("VS", "Address retrieved"); recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize); Log.d("VS", "Recorder initialized"); recorder.startRecording(); status = true; while(status == true) { //reading data from MIC into buffer minBufSize = recorder.read(buffer, 0, buffer.length); //putting buffer in the packet packet = new DatagramPacket (buffer,buffer.length,destination,port); socket.send(packet); } } catch(UnknownHostException e) { Log.e("VS", "UnknownHostException"); } catch (IOException e) { Log.e("VS", "IOException"); } } }); streamThread.start(); } public void stopStreaming(){ status = false; recorder.release(); } public void stopReceiving() { status = false; } }