Mekanism-tilera-Edition/common/mekanism/client/voice/VoiceInput.java

95 lines
2.1 KiB
Java
Raw Normal View History

2013-10-14 20:08:15 +02:00
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;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
2013-10-14 20:08:15 +02:00
@SideOnly(Side.CLIENT)
2013-10-14 20:08:15 +02:00
public class VoiceInput extends Thread
{
public VoiceClient voiceClient;
public DataLine.Info microphone;
2013-10-14 20:08:15 +02:00
public TargetDataLine targetLine;
public VoiceInput(VoiceClient client)
{
voiceClient = client;
microphone = new DataLine.Info(TargetDataLine.class, voiceClient.format, 2200);
2013-10-14 20:08:15 +02:00
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.voiceKey.pressed)
2013-10-14 20:08:15 +02:00
{
targetLine.flush();
while(voiceClient.running && MekanismKeyHandler.voiceKey.pressed)
2013-10-14 20:08:15 +02:00
{
2013-10-19 02:05:47 +02:00
try {
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);
}
} catch(Exception e) {}
2013-10-14 20:08:15 +02:00
}
try {
Thread.sleep(200L);
2013-10-18 13:33:27 +02:00
} catch(Exception e) {}
2013-10-14 20:08:15 +02:00
doFlush = true;
}
else if(doFlush)
{
2013-10-19 18:35:55 +02:00
try {
voiceClient.output.flush();
} catch(Exception e) {}
2013-10-14 20:08:15 +02:00
doFlush = false;
}
try {
Thread.sleep(20L);
2013-10-18 13:33:27 +02:00
} catch(Exception e) {}
2013-10-14 20:08:15 +02:00
}
audioInput.close();
} catch(Exception e) {
System.err.println("[Mekanism] VoiceServer: Error while running client input thread.");
2013-10-14 20:08:15 +02:00
e.printStackTrace();
}
}
public void close()
{
targetLine.flush();
targetLine.close();
}
}