`
高级java工程师
  • 浏览: 410256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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;// 存放每次从麦克获得的数据

// 格式
/**
* 脉冲编码调制: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里拷过来,这样就可以保证格式和开发工具里的一样,便于阅读,可以总是提示超过了最大长度。如果直接粘贴过来,就没事了。
分享到:
评论
4 楼 the_small_base_ 2015-08-23  
你好,可以提供调用方法吗?需要的Jar,能发下源码吗?谢谢
3 楼 alexly61 2013-08-17  
很强大!后台原理基本上看懂了,就是怎样提供语音接口呢,前台通过的麦克输出,怎样调用上面的代码呢,请指点下。
2 楼 高级java工程师 2012-04-25  
lxy66_88 写道
很强大  学习了

1 楼 lxy66_88 2012-04-19  
很强大  学习了

相关推荐

    Java实现语音合成和语音识别.rar_Java实现语音合成和语音识别_ZVV_java 语音合成_语音合成_语音识别

    首先,我们要了解Java实现语音合成功能。语音合成是指将文本转换为可播放的音频,让计算机能够“读出”文字。在Java中,可以使用Java Speech API(JSAPI)来实现这一过程。JSAPI提供了一个统一的接口,可以与不同的...

    Java实现语音播报 实例源码下载

    下面我们将详细探讨Java实现语音播报涉及的技术、库和步骤。 1. **Java Sound API** Java Sound API是Java平台内置的一套音频处理框架,它允许开发者处理音频输入、输出以及播放。在语音播报的场景中,我们可以...

    java实现语音功能 调用speech.dll

    总之,Java实现语音功能调用`speech.dll`涉及了JNI、DLL编程和可能的语音处理技术。这个过程需要对Java、C/C++以及操作系统层面的交互有一定了解,同时也依赖于`speech.dll`库提供的具体功能和接口。如果你打算进行...

    用Java实现语音引擎

    用Java实现语音引擎,语音引擎的工作原理是把细小的声音样本连接起来,每一个样本都是人的语言发音(英语)的一个最小单位。这些声音样本称为音素(allophone)。每一个因素对应一个、二个或者三个字母。

    myDemo_JAVA实现在线语音分析_语音转文字

    【标题】"myDemo_JAVA实现在线语音分析_语音转文字"揭示了这是一个基于Java语言开发的项目,其核心功能是实现语音的实时分析,并将语音转化为文字,同时还包括对转化后文字的敏感词检测。这涉及到多个技术领域,包括...

    jacob-1.19.zip java实现语音功能

    Java 实现语音功能通常涉及到与操作系统底层交互,以完成音频播放等任务。在这个场景中,"jacob-1.19.zip" 是一个用于 Java 的库,它提供了一个桥梁,使得 Java 应用程序能够调用 Microsoft Windows API,从而实现如...

    用java实现本地语音实时采取,然后对接阿里AI语音识别实现,语音识别系统。并内部加载逻辑实现电脑语音控制

    实现语音实时监听,需要创建一个持续运行的线程,不断地读取音频数据并进行处理。这通常涉及到音频数据的缓冲和处理,确保在不丢失音频信息的情况下,有效地将声音数据转化为可识别的格式。 3. **阿里云AI语音识别...

    JAVA语音转文字

    Java语言在语音识别领域提供了丰富的库和工具,使得开发者能够轻松地实现语音转文字功能。在你的项目中,你可以利用这些资源来构建一个高效的语音识别系统。以下是对"JAVA语音转文字"这一主题的详细解释。 1. **...

    java点对点语音实时聊天

    1. **Java语音处理库**:实现语音聊天的核心是处理音频数据。Java提供了多种库来支持音频操作,如Java Sound API(Java Sound Access Layer)和JMF(Java Media Framework)。这些库可以用于音频的录制、播放、编码...

    Java版socket编程实现带语音聊天和文件传送功能

    5.实现了语音聊天的功能(新增) 资源内容包括源程序和打包后的可执行jar文件,以及要用到的所有jar包; 代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有...

    java实现文字转语音文件和朗读

    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中的网络通信基础。Java通过Socket编程提供网络连接能力,允许两台机器之间的应用程序交换数据。在语音对话中,我们需要...

    java语音视频聊天程序

    实现了java 局域网内 语音视频 聊天的程序 基于jmf开发的 如果下载后该程序运行了 需要安装jfm 和配置jfm的环境变量 直接运行sounds包下的chatloginfame即可,handlens包下的程序为java的放大镜程序 java语音视频...

    科大讯飞语音唤醒SDK_forJava

    这是科大讯飞的智能语音唤醒的sdk,同学们想了解科大讯飞如何实现语音唤醒的话,可以下载此源码进行了解了解。了解整个语音唤醒的框架及其流程。 开发语言是Java,下载者需谨慎,不懂Java开发的不要下载哦

    Java中使用Jacob实现Windows下语音合成并生成音频文件示例代码.rar

    在Java编程环境中,有时我们需要与操作系统进行更深层次的交互,比如在Windows系统下实现语音合成。这个场景下,我们可以利用Jacob库(Java COM Bridge)来调用Windows API接口,完成语音合成并生成音频文件的任务。...

    java录音,并调用科大讯飞语音转写实现会议既要

    java调用科大讯飞语音转写接口,实现会议录音,并实现记录会议既要功能!

    java实现局域网内语音通话.zip

    本项目“java实现局域网内语音通话”是一个利用Java技术实现实时语音通信的示例。它允许用户在局域网环境中进行1对1或群组通话,无需预先知晓所有参与者的IP地址,极大地提高了通信的便利性。 首先,我们要理解Java...

    Skype4Java java语音聊天 语音即时通讯

    《Skype4Java:Java实现语音聊天与即时通讯详解》 在现代的互联网通信领域,实时的语音聊天和即时通讯已经成为不可或缺的一部分。Skype4Java是Skype公司为开发者提供的一种API,允许开发者使用Java语言集成Skype的...

    java实现麦克风自动录音

    java实现麦克风自动录音 获取麦克风音频数据,在控制台输入字母end按回车,则结束录音;

    Java语言实现文本转语音

    总的来说,Java实现文本转语音的关键在于利用Jacob库调用操作系统级别的TTS服务。开发过程中,不仅需要理解Java与COM交互的机制,还需要了解Windows TTS引擎的工作原理,以便有效地将文本转化为流畅的语音输出。同时...

Global site tag (gtag.js) - Google Analytics