Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package audio;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.util.LinkedList;
- import javax.sound.sampled.*;
- public class AudioReceiver extends Thread {
- private DatagramSocket serverSocket;
- private int bufferSize;
- private SourceDataLine line;
- private LinkedList<byte[]> dataDelay;
- private LinkedList<Long> dataTimes;
- private AudioFormat format;
- byte win;
- public AudioReceiver(DatagramSocket serverSocket, AudioFormat audioFormat)
- throws Exception {
- this.serverSocket = serverSocket;
- this.dataDelay = new LinkedList<byte[]>();
- this.dataTimes = new LinkedList<Long>();
- this.bufferSize = ((int) (audioFormat.getSampleRate() * audioFormat
- .getFrameSize()) / 50) + 1;
- this.line = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(
- SourceDataLine.class, audioFormat));
- this.format=audioFormat;
- this.win = 0;
- }
- public void run() {
- byte buffer[] = new byte[this.bufferSize];
- DatagramPacket receiverPacket = new DatagramPacket(buffer,
- this.bufferSize);
- try {
- serverSocket.receive(receiverPacket);
- Thread.sleep(30);
- this.line.open(this.format);
- this.line.start();
- win = buffer[0];
- while (true) {
- try {
- if (win != buffer[0]) {
- dataDelay.add(buffer);
- dataTimes.add(System.currentTimeMillis() + 20);
- serverSocket.setSoTimeout(18);
- } else {
- line.write(buffer, 1, bufferSize - 1);
- putInBuffer();
- }
- serverSocket.receive(receiverPacket);
- } catch (Exception e) {
- line.write(new byte[this.bufferSize], 1, bufferSize - 1);
- putInBuffer();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void putInBuffer() {
- win = (byte) (++win % 20);
- while(dataDelay.size()>0&&(dataDelay.getFirst()[0]==win||dataTimes.getFirst()<=System.currentTimeMillis())){
- line.write(dataDelay.remove(), 1, bufferSize - 1);
- dataTimes.remove();
- win = (byte) (++win % 20);
- }
- }
- }
Add Comment
Please, Sign In to add comment