90 lines
1.9 KiB
Java
90 lines
1.9 KiB
Java
|
package mekanism.client.voice;
|
||
|
|
||
|
import javax.sound.sampled.AudioInputStream;
|
||
|
import javax.sound.sampled.AudioSystem;
|
||
|
import javax.sound.sampled.DataLine;
|
||
|
import javax.sound.sampled.TargetDataLine;
|
||
|
|
||
|
import mekanism.client.MekanismKeyHandler;
|
||
|
|
||
|
public class VoiceInput extends Thread
|
||
|
{
|
||
|
public VoiceClient voiceClient;
|
||
|
|
||
|
public DataLine.Info microphone = new DataLine.Info(TargetDataLine.class, voiceClient.format, 2200);
|
||
|
|
||
|
public TargetDataLine targetLine;
|
||
|
|
||
|
public VoiceInput(VoiceClient client)
|
||
|
{
|
||
|
voiceClient = client;
|
||
|
|
||
|
setDaemon(true);
|
||
|
setName("VoiceServer Client Input Thread");
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void run()
|
||
|
{
|
||
|
try {
|
||
|
targetLine = ((TargetDataLine)AudioSystem.getLine(microphone));
|
||
|
targetLine.open(voiceClient.format, 2200);
|
||
|
targetLine.start();
|
||
|
AudioInputStream audioInput = new AudioInputStream(targetLine);
|
||
|
|
||
|
boolean doFlush = false;
|
||
|
|
||
|
while(voiceClient.running)
|
||
|
{
|
||
|
if(MekanismKeyHandler.voiceDown)
|
||
|
{
|
||
|
targetLine.flush();
|
||
|
|
||
|
while(voiceClient.running && MekanismKeyHandler.voiceDown)
|
||
|
{
|
||
|
int availableBytes = audioInput.available();
|
||
|
byte[] audioData = new byte[availableBytes > 2200 ? 2200 : availableBytes];
|
||
|
int bytesRead = audioInput.read(audioData, 0, audioData.length);
|
||
|
|
||
|
if(bytesRead > 0)
|
||
|
{
|
||
|
voiceClient.output.writeShort(audioData.length);
|
||
|
voiceClient.output.write(audioData);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
Thread.sleep(200L);
|
||
|
} catch(Exception e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
|
||
|
doFlush = true;
|
||
|
}
|
||
|
else if(doFlush)
|
||
|
{
|
||
|
voiceClient.output.flush();
|
||
|
doFlush = false;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
Thread.sleep(20L);
|
||
|
} catch(Exception e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
audioInput.close();
|
||
|
} catch(Exception e) {
|
||
|
System.err.println("Error while running microphone loop.");
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void close()
|
||
|
{
|
||
|
targetLine.flush();
|
||
|
targetLine.close();
|
||
|
}
|
||
|
}
|