天天看点

java语音_java实现语音

终于用java实现了语音聊天,贴出代码来,一起学习,嘿嘿。

import java.net.*;

import javax.sound.sampled.*;

public class ChartReceive extends Thread {

//格式

private AudioFormat format = new AudioFormat(

AudioFormat.Encoding.PCM_SIGNED, 44100.0f, 16, 1, 2, 44100.0f, false);

//管道

private SourceDataLine line;

private byte[] data;

public ChartReceive() {

try {

DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

line = (SourceDataLine) AudioSystem.getLine(info);

} catch (Exception e) {

e.printStackTrace();

}

}

public void run() {

System.out.println("receive threading start");

int length=(int)(format.getFrameSize()*format.getFrameRate()/2.0f);

try{line.open(format);line.start();

DatagramSocket socket=new DatagramSocket(ChartSend.PORT);

while(true){

//数组的创建载什么时候,是否影响数据信息?

data=new byte[length];

DatagramPacket dp=new DatagramPacket(data,data.length);

socket.receive(dp);

line.write(data,0,data.length);

System.out.println("receive success "+new String(data,"UTF-8"));

}

}catch(Exception e){

e.printStackTrace();

}

}

}

import java.io.IOException;

import java.net.*;

import javax.sound.sampled.*;

public class ChartSend extends Thread {

public static final int PORT = 3333;

private InetAddress toIp;// 目的ip

private TargetDataLine line;// 管道

private byte[] data;// 存放每次从麦克获得的数据

// 格式

private AudioFormat format = new AudioFormat(

AudioFormat.Encoding.PCM_SIGNED, 44100.0f, 16, 1, 2, 44100.0f, false);

public ChartSend(InetAddress toIp) {

this.toIp = toIp;

DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

try {

line = (TargetDataLine) AudioSystem.getLine(info);

} catch (LineUnavailableException e) {

e.printStackTrace();

}

}

public void run() {

System.out.println("send threading start");

try {

line.open(format, line.getBufferSize());

line.start();

int length = (int) (format.getFrameSize() * format.getFrameRate() / 2.0f);

while (true) {

data = new byte[length];

line.read(data, 0, data.length);

sendData();

}

} catch (LineUnavailableException e) {

e.printStackTrace();

}

}

private void sendData() {

try {

DatagramPacket dp = new DatagramPacket(data, data.length, toIp,

PORT);

DatagramSocket ds = new DatagramSocket();

ds.send(dp);

ds.close();

System.out.println("send success");

} catch (SocketException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

真不知道百度这最大长度是怎么计算的。本来想好好整理一下格式。我先把代码复制到word里,然后从word里拷过来,这样就可以保证格式和开发工具里的一样,便于阅读,可以总是提示超过了最大长度。如果直接粘贴过来,就没事了。

分享到:

java语音_java实现语音
java语音_java实现语音

2012-03-13 13:02

浏览 5976

评论

你好,可以提供调用方法吗?需要的Jar,能发下源码吗?谢谢

java语音_java实现语音

3 楼

alexly61

2013-08-17

很强大!后台原理基本上看懂了,就是怎样提供语音接口呢,前台通过的麦克输出,怎样调用上面的代码呢,请指点下。

2 楼

高级java工程师

2012-04-25

lxy66_88 写道

很强大  学习了

java语音_java实现语音

1 楼

lxy66_88

2012-04-19

很强大  学习了