Guest User

Untitled

a guest
Mar 16th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. package audio;
  2.  
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.util.LinkedList;
  6.  
  7. import javax.sound.sampled.*;
  8.  
  9.  
  10. public class AudioReceiver extends Thread {
  11. private DatagramSocket serverSocket;
  12. private int bufferSize;
  13. private SourceDataLine line;
  14. private LinkedList<byte[]> dataDelay;
  15. private LinkedList<Long> dataTimes;
  16. private AudioFormat format;
  17. byte win;
  18.  
  19. public AudioReceiver(DatagramSocket serverSocket, AudioFormat audioFormat)
  20. throws Exception {
  21. this.serverSocket = serverSocket;
  22. this.dataDelay = new LinkedList<byte[]>();
  23. this.dataTimes = new LinkedList<Long>();
  24. this.bufferSize = ((int) (audioFormat.getSampleRate() * audioFormat
  25. .getFrameSize()) / 50) + 1;
  26. this.line = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(
  27. SourceDataLine.class, audioFormat));
  28. this.format=audioFormat;
  29. this.win = 0;
  30. }
  31.  
  32. public void run() {
  33. byte buffer[] = new byte[this.bufferSize];
  34. DatagramPacket receiverPacket = new DatagramPacket(buffer,
  35. this.bufferSize);
  36. try {
  37. serverSocket.receive(receiverPacket);
  38. Thread.sleep(30);
  39. this.line.open(this.format);
  40. this.line.start();
  41. win = buffer[0];
  42. while (true) {
  43. try {
  44. if (win != buffer[0]) {
  45. dataDelay.add(buffer);
  46. dataTimes.add(System.currentTimeMillis() + 20);
  47. serverSocket.setSoTimeout(18);
  48. } else {
  49. line.write(buffer, 1, bufferSize - 1);
  50. putInBuffer();
  51. }
  52. serverSocket.receive(receiverPacket);
  53. } catch (Exception e) {
  54. line.write(new byte[this.bufferSize], 1, bufferSize - 1);
  55. putInBuffer();
  56. }
  57. }
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. public void putInBuffer() {
  63. win = (byte) (++win % 20);
  64. while(dataDelay.size()>0&&(dataDelay.getFirst()[0]==win||dataTimes.getFirst()<=System.currentTimeMillis())){
  65. line.write(dataDelay.remove(), 1, bufferSize - 1);
  66. dataTimes.remove();
  67. win = (byte) (++win % 20);
  68. }
  69. }
  70. }
Add Comment
Please, Sign In to add comment