终于用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;// 存放每次从麦克获得的数据
// 格式
/**
* 脉冲编码调制:pcm、mu-law编码和a-law编码
* 信道数:单声道有一个信道,立体声有两个信道
* 样本速率:测量每信道、每秒钟采用的声压快照数,不管声道数是多少,速率都一样。
* 样本大小:指示用于存储每个快照的位数,典型值是8和16,对于16位样本,字节顺序很重要
* 每个样本中的字节或者以little-endian或者以big-endian样式排列。
* 对于PCM编码,帧是由在给定时间点上所有声道的样本集合组成,因此帧的大小总是等于样本大小成一声道数。
*
* 声道编码,每秒播放或者录制的样本数,声音样本中的位数,音频信道数,每秒播放或者录制的帧数 ,
* 以 big-endian 顺序还是 little-endian 顺序存储音频数据
* */
private AudioFormat format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, 44100.0f, 16, 1, 2, 44100.0f, false);
/**
* @param toIp 发送目的地的ip
* */
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();
}
}
/**
* 使用UDP协议传输声音
*/
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实现语音引擎,语音引擎的工作原理是把细小的声音样本连接起来,每一个样本都是人的语言发音(英语)的一个最小单位。这些声音样本称为音素(allophone)。每一个因素对应一个、二个或者三个字母。
用java实现本地语音实时采取,然后对接阿里AI语音识别实现,语音识别系统。并内部加载逻辑实现电脑语音控制
Java实现的实时语音聊天,需要的可以参考一下,应该会有帮助。1111111111111111111111111111111111
5.实现了语音聊天的功能(新增) 资源内容包括源程序和打包后的可执行jar文件,以及要用到的所有jar包; 代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有...
在工程中如果需要用到语音转文字功能,可以使用本代码,修改后调用。测试时可以运行main.java文件,根据控制台提示信息,进行录音,然后自动转化为文字。
java调用科大讯飞语音转写接口,实现会议录音,并实现记录会议既要功能!
这是科大讯飞的智能语音唤醒的sdk,同学们想了解科大讯飞如何实现语音唤醒的话,可以下载此源码进行了解了解。了解整个语音唤醒的框架及其流程。 开发语言是Java,下载者需谨慎,不懂Java开发的不要下载哦
Java中使用Jacob实现Windows下语音合成并生成音频文件示例代码.rar
主要实现的是一个语音实时分析的效果,通过语音转化为文字信息后在提取敏感词的功能。
基于Java实现语音通话,可实现 1对1通话(明确对方IP地址)或者群通话(不需要知道对方IP地址),希望能帮到更多小伙伴,直接运行main方法就可以,总共三个文件,有问题留言交流。
java实现麦克风自动录音 获取麦克风音频数据,在控制台输入字母end按回车,则结束录音;
NULL 博文链接:https://67566894.iteye.com/blog/681959
java调用dll文件实现离线文字转语音,具体代码实现请搜索别的博客
java语音播报所使用的jar环境,使用前将dll放置系统路径下该jar放置 jdk、jre指定的文件夹中.
JAVA语音信号传输技术文档JAVA语音信号传输技术文档
一个Java语音聊天工具,可实现如同QQ或其它语音聊天一样的功能
利用java实现文字转语音播放,可控制语速声音大小等。
java 实现语音聊天简单实例 对初学者有极大帮助