123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- 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;
- }
- }
|