终于用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 Speech API(JSAPI)来实现这一过程。JSAPI提供了一个统一的接口,可以与不同的...
下面我们将详细探讨Java实现语音播报涉及的技术、库和步骤。 1. **Java Sound API** Java Sound API是Java平台内置的一套音频处理框架,它允许开发者处理音频输入、输出以及播放。在语音播报的场景中,我们可以...
总之,Java实现语音功能调用`speech.dll`涉及了JNI、DLL编程和可能的语音处理技术。这个过程需要对Java、C/C++以及操作系统层面的交互有一定了解,同时也依赖于`speech.dll`库提供的具体功能和接口。如果你打算进行...
用Java实现语音引擎,语音引擎的工作原理是把细小的声音样本连接起来,每一个样本都是人的语言发音(英语)的一个最小单位。这些声音样本称为音素(allophone)。每一个因素对应一个、二个或者三个字母。
【标题】"myDemo_JAVA实现在线语音分析_语音转文字"揭示了这是一个基于Java语言开发的项目,其核心功能是实现语音的实时分析,并将语音转化为文字,同时还包括对转化后文字的敏感词检测。这涉及到多个技术领域,包括...
Java 实现语音功能通常涉及到与操作系统底层交互,以完成音频播放等任务。在这个场景中,"jacob-1.19.zip" 是一个用于 Java 的库,它提供了一个桥梁,使得 Java 应用程序能够调用 Microsoft Windows API,从而实现如...
实现语音实时监听,需要创建一个持续运行的线程,不断地读取音频数据并进行处理。这通常涉及到音频数据的缓冲和处理,确保在不丢失音频信息的情况下,有效地将声音数据转化为可识别的格式。 3. **阿里云AI语音识别...
Java语言在语音识别领域提供了丰富的库和工具,使得开发者能够轻松地实现语音转文字功能。在你的项目中,你可以利用这些资源来构建一个高效的语音识别系统。以下是对"JAVA语音转文字"这一主题的详细解释。 1. **...
1. **Java语音处理库**:实现语音聊天的核心是处理音频数据。Java提供了多种库来支持音频操作,如Java Sound API(Java Sound Access Layer)和JMF(Java Media Framework)。这些库可以用于音频的录制、播放、编码...
5.实现了语音聊天的功能(新增) 资源内容包括源程序和打包后的可执行jar文件,以及要用到的所有jar包; 代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有...
java实现文字转语音文件和朗读功能,还要下载jacob-1.17-M2.rar文件。将jacob.jar导入java项目中,64bit就将jacob-1.18-x64.dll放入System32目录下;32bit就将jacob-1.18-x86.dll放入System32目录下。
本文将详细解析如何使用Java实现网络语音对话,并探讨相关的关键技术。 首先,我们要理解Java中的网络通信基础。Java通过Socket编程提供网络连接能力,允许两台机器之间的应用程序交换数据。在语音对话中,我们需要...
实现了java 局域网内 语音视频 聊天的程序 基于jmf开发的 如果下载后该程序运行了 需要安装jfm 和配置jfm的环境变量 直接运行sounds包下的chatloginfame即可,handlens包下的程序为java的放大镜程序 java语音视频...
这是科大讯飞的智能语音唤醒的sdk,同学们想了解科大讯飞如何实现语音唤醒的话,可以下载此源码进行了解了解。了解整个语音唤醒的框架及其流程。 开发语言是Java,下载者需谨慎,不懂Java开发的不要下载哦
在Java编程环境中,有时我们需要与操作系统进行更深层次的交互,比如在Windows系统下实现语音合成。这个场景下,我们可以利用Jacob库(Java COM Bridge)来调用Windows API接口,完成语音合成并生成音频文件的任务。...
java调用科大讯飞语音转写接口,实现会议录音,并实现记录会议既要功能!
本项目“java实现局域网内语音通话”是一个利用Java技术实现实时语音通信的示例。它允许用户在局域网环境中进行1对1或群组通话,无需预先知晓所有参与者的IP地址,极大地提高了通信的便利性。 首先,我们要理解Java...
《Skype4Java:Java实现语音聊天与即时通讯详解》 在现代的互联网通信领域,实时的语音聊天和即时通讯已经成为不可或缺的一部分。Skype4Java是Skype公司为开发者提供的一种API,允许开发者使用Java语言集成Skype的...
java实现麦克风自动录音 获取麦克风音频数据,在控制台输入字母end按回车,则结束录音;
总的来说,Java实现文本转语音的关键在于利用Jacob库调用操作系统级别的TTS服务。开发过程中,不仅需要理解Java与COM交互的机制,还需要了解Windows TTS引擎的工作原理,以便有效地将文本转化为流畅的语音输出。同时...