| package mekanism.client.voice; |
| |
| import mekanism.common.Mekanism; |
| |
| import cpw.mods.fml.relauncher.Side; |
| import cpw.mods.fml.relauncher.SideOnly; |
| |
| import javax.sound.sampled.AudioSystem; |
| import javax.sound.sampled.DataLine; |
| import javax.sound.sampled.SourceDataLine; |
| |
| @SideOnly(Side.CLIENT) |
| public class VoiceOutput extends Thread |
| { |
| public VoiceClient voiceClient; |
| |
| public DataLine.Info speaker; |
| |
| public SourceDataLine sourceLine; |
| |
| public VoiceOutput(VoiceClient client) |
| { |
| voiceClient = client; |
| speaker = new DataLine.Info(SourceDataLine.class, voiceClient.format, 2200); |
| |
| setDaemon(true); |
| setName("VoiceServer Client Output Thread"); |
| } |
| |
| @Override |
| public void run() |
| { |
| try { |
| sourceLine = ((SourceDataLine)AudioSystem.getLine(speaker)); |
| sourceLine.open(voiceClient.format, 2200); |
| sourceLine.start(); |
| |
| while(voiceClient.running) |
| { |
| try { |
| short byteCount = voiceClient.input.readShort(); |
| byte[] audioData = new byte[byteCount]; |
| voiceClient.input.readFully(audioData); |
| |
| sourceLine.write(audioData, 0, audioData.length); |
| } catch(Exception e) {} |
| } |
| } catch(Exception e) { |
| Mekanism.logger.error("VoiceServer: Error while running client output thread."); |
| e.printStackTrace(); |
| } |
| } |
| |
| public void close() |
| { |
| sourceLine.flush(); |
| sourceLine.close(); |
| } |
| } |