KFB podstawa

KfbINtercom.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package com.kfb.kfbv1.media;
  2. import android.media.AudioFormat;
  3. import android.media.AudioManager;
  4. import android.media.AudioRecord;
  5. import android.media.AudioTrack;
  6. import android.media.MediaRecorder;
  7. import android.util.Log;
  8. import com.kfb.kfbv1.model.KfbGate;
  9. import java.io.IOException;
  10. import java.net.DatagramPacket;
  11. import java.net.DatagramSocket;
  12. import java.net.InetAddress;
  13. import java.net.SocketException;
  14. import java.net.URL;
  15. import java.net.UnknownHostException;
  16. public class KfbINtercom {
  17. private KfbGate tablet;
  18. AudioRecord recorder;
  19. public byte[] buffer;
  20. public static DatagramSocket socket;
  21. private AudioTrack speaker;
  22. private int port=50005;
  23. private int sampleRate = 8000; //How much will be ideal?
  24. private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
  25. private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
  26. private boolean status = true;
  27. public void setTable(KfbGate aTablet)
  28. {
  29. tablet = aTablet;
  30. }
  31. public void startReceiving() {
  32. Thread receiveThread = new Thread(new Runnable() {
  33. @Override
  34. public void run() {
  35. try {
  36. DatagramSocket socket = new DatagramSocket(50005);
  37. Log.d("VR", "Socket Created");
  38. byte[] buffer = new byte[256];
  39. //minimum buffer size. need to be careful. might cause problems. try setting manually if any problems faced
  40. int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
  41. speaker = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, minBufSize, AudioTrack.MODE_STREAM);
  42. speaker.play();
  43. while (status == true) {
  44. try {
  45. DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
  46. socket.receive(packet);
  47. Log.d("VR", "Packet Received");
  48. //reading content from packet
  49. buffer = packet.getData();
  50. Log.d("VR", "Packet data read into buffer");
  51. //sending data to the Audiotrack obj i.e. speaker
  52. speaker.write(buffer, 0, minBufSize);
  53. Log.d("VR", "Writing buffer content to speaker");
  54. } catch (IOException e) {
  55. Log.e("VR", "IOException");
  56. }
  57. }
  58. } catch (SocketException e) {
  59. Log.e("VR", "SocketException");
  60. }
  61. }
  62. });
  63. receiveThread.start();
  64. }
  65. public void startStreaming() {
  66. Thread streamThread = new Thread(new Runnable() {
  67. @Override
  68. public void run() {
  69. try {
  70. int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
  71. DatagramSocket socket = new DatagramSocket();
  72. Log.d("VS", "Socket Created");
  73. byte[] buffer = new byte[minBufSize];
  74. Log.d("VS","Buffer created of size " + minBufSize);
  75. DatagramPacket packet;
  76. // URL u = new URL(tablet.getmAdres());
  77. final InetAddress destination = InetAddress.getByName(tablet.getmAdres());
  78. Log.d("VS", "Address retrieved");
  79. recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize);
  80. Log.d("VS", "Recorder initialized");
  81. recorder.startRecording();
  82. status = true;
  83. while(status == true) {
  84. //reading data from MIC into buffer
  85. minBufSize = recorder.read(buffer, 0, buffer.length);
  86. //putting buffer in the packet
  87. packet = new DatagramPacket (buffer,buffer.length,destination,port);
  88. socket.send(packet);
  89. }
  90. } catch(UnknownHostException e) {
  91. Log.e("VS", "UnknownHostException");
  92. } catch (IOException e) {
  93. Log.e("VS", "IOException");
  94. }
  95. }
  96. });
  97. streamThread.start();
  98. }
  99. public void stopStreaming(){
  100. status = false;
  101. recorder.release();
  102. }
  103. public void stopReceiving()
  104. {
  105. status = false;
  106. }
  107. }