Skip to content

Instantly share code, notes, and snippets.

@HyCraftHD
Created December 3, 2019 22:13
Show Gist options
  • Save HyCraftHD/725a5e3611328d58353a96afab658f62 to your computer and use it in GitHub Desktop.
Save HyCraftHD/725a5e3611328d58353a96afab658f62 to your computer and use it in GitHub Desktop.
Basic UDP audio transmission (ATTENTION, The audio is raw and will not be encoded)
package test.voicechat;
import java.net.*;
import javax.sound.sampled.*;
public class VoiceChat {
private final static String HOST = "udp.echoserver.example";
private static DatagramSocket socket;
private static final AudioFormat format = new AudioFormat(48000, 16, 2, true, true);
private static final DataLine.Info micInfo = new DataLine.Info(TargetDataLine.class, format);
private static final DataLine.Info speakerInfo = new DataLine.Info(SourceDataLine.class, format);
public static void main(String[] args) throws Exception {
socket = new DatagramSocket();
send();
receive();
}
private static void send() {
final Runnable runnable = () -> {
try {
TargetDataLine targetLine = (TargetDataLine) AudioSystem.getLine(micInfo);
targetLine.open(format);
targetLine.start();
int numBytesRead;
byte[] targetData = new byte[1000];
System.out.println(targetLine.getBufferSize());
while (true) {
numBytesRead = targetLine.read(targetData, 0, targetData.length);
if (numBytesRead >= 0) {
final DatagramPacket datagramPacket = new DatagramPacket(targetData, numBytesRead, InetAddress.getByName(HOST), 10000);
socket.send(datagramPacket);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
};
new Thread(runnable).start();
}
private static void receive() {
final Runnable runnable = () -> {
try {
SourceDataLine sourceLine = (SourceDataLine) AudioSystem.getLine(speakerInfo);
sourceLine.open(format);
sourceLine.start();
while (true) {
final byte[] array = new byte[1000];
final DatagramPacket datagramPacket = new DatagramPacket(array, array.length);
socket.receive(datagramPacket);
sourceLine.write(array, 0, datagramPacket.getLength());
}
} catch (Exception ex) {
ex.printStackTrace();
}
};
new Thread(runnable).start();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment