Hallo, ich habe folgendes Problem:
Mein Client sendet meinen Mikrofon Input als byte array im while loop an meinen Server. Dieser konvertiert dann das byte array zu einem
Das funktioniert auch im Prinizp, allerdings muss ich nach jeder Iteration
Wenn ich
Ich weiß im Moment leider nicht wirklich, wie ich das umgehen kann.
Hier ist der Code:
Ich danke euch schon mal im Vorraus
Mein Client sendet meinen Mikrofon Input als byte array im while loop an meinen Server. Dieser konvertiert dann das byte array zu einem
javax.sound.sampled.Clip
und spielt es sofort wieder ab.Das funktioniert auch im Prinizp, allerdings muss ich nach jeder Iteration
clip = AudioSystem.getClip();
benutzen. Dies erzeugt allerdings jedes mal einen neuen Thread, weshalb es nicht lange dauern wird, bis mein Programm keinen Speicher mehr zu Verfügung hat und abstürzen wird.Wenn ich
clip = AudioSystem.getClip();
außerhalb der while Schleife packen würde, würde es wiederum nach der 1. Iteration folgende Exception geben: java.lang.IllegalStateException: Clip is already open with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/frame, big-endian and frame lengh of 1600
Ich weiß im Moment leider nicht wirklich, wie ich das umgehen kann.
Hier ist der Code:
Java:
public void playAudio() {
DataInputStream in ;
byte[] buffer;
Clip clip = null;
while (lastClicked[0] == 0) {
try {
in = new DataInputStream(new BufferedInputStream(socket));
buffer = new byte[3200];
in.readFully(buffer);
clip = AudioSystem.getClip();
clip.open(format, buffer, 0, buffer.length);
clip.start();
clip.drain();
} catch (IOException | LineUnavailableException e) {
e.printStackTrace();
}
}
}
Ich danke euch schon mal im Vorraus