精华内容
下载资源
问答
  • 在做项目的过程中,我们往往会用到语音播报——把文字转换成语音播放出来,自动识别语言进行播报,那么我们现在来看看怎么操作:1.下载jacob.jar,下载地址:这里2.32位操作系统下载:jacob-1.17-M2-x32.dll,64位...

    在做项目的过程中,我们往往会用到语音播报——把文字转换成语音播放出来,自动识别语言进行播报,那么我们现在来看看怎么操作:

    1.下载jacob.jar,下载地址:这里

    2.32位操作系统下载:jacob-1.17-M2-x32.dll,64位操作系统下载:jacob-1.17-M2-x64.dll,下载地址:这里

    3.将jacob.jar考到项目中进行构建路径。

    4.将jacob-1.17-M2-x32.dll或者jacob-1.17-M2-x64.dll,考到系统盘:\Windows\System32\下面。

    5.将jacob-1.17-M2-x32.dll或者jacob-1.17-M2-x64.dll,考到JDK安装目录的bin下面。

    然后写个test方法测试一下即可,测试代码如下:

    /**

    * @Title: Voice.java

    * @Package org.util

    * @Description: TODO该方法的主要作用:

    * @author A18ccms A18ccms_gmail_com

    * @date 2017-7-3 下午9:03:45

    * @version V1.0

    */

    package cn.bdqn.bdqn.utils;

    import org.junit.Test;

    import com.jacob.activeX.ActiveXComponent;

    import com.jacob.com.Dispatch;

    import com.jacob.com.Variant;

    /**

    *

    * 项目名称:avoice

    * 类名称:Voice

    * 类描述: 语音播报工具类

    * 创建人:Mu Xiongxiong

    * 创建时间:2017-7-3 下午9:03:45

    * 修改人:Mu Xiongxiong

    * 修改时间:2017-7-3 下午9:03:45

    * 修改备注:

    * @version

    *

    */

    public class Voice {

    /**

    *

    * @Title: strat

    * @Description: 该方法的主要作用:朗读

    * @param @param content

    * @param @param type 设定文件 0:开始,1停止

    * @return 返回类型:void

    * @throws

    */

    public void strat(String content, int type) {

    // ?? 这个Sapi.SpVoice是需要安装什么东西吗,感觉平白无故就来了

    ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");

    // Dispatch是做什么的?

    Dispatch sapo = sap.getObject();

    if (type == 0) {

    try {

    // 音量 0-100

    sap.setProperty("Volume", new Variant(100));

    // 语音朗读速度 -10 到 +10

    sap.setProperty("Rate", new Variant(1.3));

    Variant defalutVoice = sap.getProperty("Voice");

    Dispatch dispdefaultVoice = defalutVoice.toDispatch();

    Variant allVoices = Dispatch.call(sapo, "GetVoices");

    Dispatch dispVoices = allVoices.toDispatch();

    Dispatch setvoice = Dispatch.call(dispVoices, "Item",

    new Variant(1)).toDispatch();

    ActiveXComponent voiceActivex = new ActiveXComponent(

    dispdefaultVoice);

    ActiveXComponent setvoiceActivex = new ActiveXComponent(

    setvoice);

    Variant item = Dispatch.call(setvoiceActivex, "GetDescription");

    // 执行朗读

    Dispatch.call(sapo, "Speak", new Variant(content));

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    sapo.safeRelease();

    sap.safeRelease();

    }

    } else {

    // 停止

    try {

    Dispatch.call(sapo, "Speak", new Variant(content), new Variant(

    2));

    } catch (Exception e) {

    System.out.println(e.getMessage());

    e.printStackTrace();

    }

    }

    }

    /**

    *

    * @Title: test

    * @Description: 该方法的主要作用:执行朗读内容

    * @param 设定文件

    * @return 返回类型:void

    * @throws

    */

    @Test

    public void test()

    {

    strat("语音朗读的内容", 0);

    }

    }

    展开全文
  • 基于Java实现语音通话,可实现 1对1通话(明确对方IP地址)或者群通话(不需要知道对方IP地址),希望能帮到更多小伙伴,直接运行main方法就可以,总共三个文件,有问题留言交流。
  • java网络语音对话代码

    2014-04-07 18:32:02
    可以进行网络语音对话。也可以文字通话java源代码。
  • 最近在研究语音识别,使用百度的sdk。发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件。先上代码:public class EngineeCore {String filePath = "E:\\voice\\voice_cache.wav";...

    最近在研究语音识别,使用百度的sdk。发现只有识别的部分,而我需要保存音频文件,并且实现当有声音传入时自动生成音频文件。

    先上代码:

    public class EngineeCore {

    String filePath = "E:\\voice\\voice_cache.wav";

    AudioFormat audioFormat;

    TargetDataLine targetDataLine;

    boolean flag = true;

    private void stopRecognize() {

    flag = false;

    targetDataLine.stop();

    targetDataLine.close();

    }private AudioFormat getAudioFormat() {

    float sampleRate = 16000;

    // 8000,11025,16000,22050,44100

    int sampleSizeInBits = 16;

    // 8,16

    int channels = 1;

    // 1,2

    boolean signed = true;

    // true,false

    boolean bigEndian = false;

    // true,false

    return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);

    }// end getAudioFormat

    private void startRecognize() {

    try {

    // 获得指定的音频格式

    audioFormat = getAudioFormat();

    DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, audioFormat);

    targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);

    // Create a thread to capture the microphone

    // data into an audio file and start the

    // thread running. It will run until the

    // Stop button is clicked. This method

    // will return after starting the thread.

    flag = true;

    new CaptureThread().start();

    } catch (Exception e) {

    e.printStackTrace();

    } // end catch

    }// end captureAudio method

    class CaptureThread extends Thread {

    public void run() {

    AudioFileFormat.Type fileType = null;

    File audioFile = new File(filePath);

    fileType = AudioFileFormat.Type.WAVE;

    //声音录入的权值

    int weight = 2;

    //判断是否停止的计数

    int downSum = 0;

    ByteArrayInputStream bais = null;

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    AudioInputStream ais = null;

    try {

    targetDataLine.open(audioFormat);

    targetDataLine.start();

    byte[] fragment = new byte[1024];

    ais = new AudioInputStream(targetDataLine);

    while (flag) {

    targetDataLine.read(fragment, 0, fragment.length);

    //当数组末位大于weight时开始存储字节(有声音传入),一旦开始不再需要判断末位

    if (Math.abs(fragment[fragment.length-1]) > weight || baos.size() > 0) {

    baos.write(fragment);

    System.out.println("守卫:"+fragment[0]+",末尾:"+fragment[fragment.length-1]+",lenght"+fragment.length);

    //判断语音是否停止

    if(Math.abs(fragment[fragment.length-1])<=weight){

    downSum++;

    }else{

    System.out.println("重置奇数");

    downSum=0;

    }               //计数超过20说明此段时间没有声音传入(值也可更改)

    if(downSum>20){

    System.out.println("停止录入");

    break;

    }

    }

    }

    //取得录音输入流

    audioFormat = getAudioFormat();

    byte audioData[] = baos.toByteArray();

    bais = new ByteArrayInputStream(audioData);

    ais = new AudioInputStream(bais, audioFormat, audioData.length / audioFormat.getFrameSize());

    //定义最终保存的文件名

    System.out.println("开始生成语音文件");

    AudioSystem.write(ais, AudioFileFormat.Type.WAVE, audioFile);

    downSum = 0;

    stopRecognize();

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    //关闭流

    try {

    ais.close();

    bais.close();

    baos.reset();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }// end run

    }// end inner class CaptureThread

    接下来测试

    public static void main(String args[]) {

    EngineeCore engineeCore = new EngineeCore();

    engineeCore.startRecognize();

    }

    当有较高的声音传入麦克风时,targetDataLine读取的字节数组首位或末位绝对值会变大(位置取决于音频格式中的一些参数,如bigEndian)。传入音量低,绝对值会变小

    录音开始。从targetDataLine中读取的音频数据被保存在ByteArrayOutputStream中。一段时间音量一直低于权值时,认为无声音传入,结束录音。从ByteArrayOutputStream取出字节数组,

    转为音频保存在本地文件中。

    注意:

    从targetDataLine读取的字节数组不能直接用于百度等语音识别,需要先转为音频文件,然后读取音频文件生成的字节数组,才可用于语音识别。

    以上就是Java 实现麦克风自动录音的详细内容,更多关于Java 麦克风自动录音的资料请关注脚本之家其它相关文章!

    展开全文
  • Java 语音实时

    2015-06-10 21:48:42
    Java实现实时通话 通过Socket来实现的 要的就来下载吧
  • 自从Recorder H5 GitHub开源库优化后,对边录边转码成小语音片段文件实时上传服务器这种操作支持非常良好,因此以前不太好支持的H5语音通话已经有了更好的突破空间。因此花了两晚时间打造了一个H5语音通话聊天的demo...

    自从Recorder H5 GitHub开源库优化后,对边录边转码成小语音片段文件实时上传服务器这种操作支持非常良好,因此以前不太好支持的H5语音通话已经有了更好的突破空间。因此花了两晚时间打造了一个H5语音通话聊天的demo。

    欢迎在线把玩:https://xiangyuecn.github.io/Recorder/

    7c7181902a6d83c0e92cf2303b5e9d18.png

    一、把玩方法

    1. 准备局域网内两台设备(Peer A、Peer B)用最新版本浏览器(demo未适配低版本)分别打开demo页面(也可以是同一浏览器打开两个标签)
    2. 勾选页面中的H5版语音通话聊天,在Peer A中点击新建连接
    3. 把Peer A的本机信手动复制传输给Peer B,粘贴到远程信息中,并点击确定连接
    4. 把Peer B自动生成的本机信息手动复制传输给Peer A,粘贴到远程信息中,并点击确定连接
    5. 双方P2P连接已建立,使用页面上方的录音功能,随时开启录音,音频数据会实时发送给对方

    局域网H5版对讲机

    二、技术特性

    (1)数据传输

    github demo中考虑到减少对服务器的依赖,因此采用了WebRTC P2P传输功能,无需任何服务器支持即可实现局域网内的两个设备之间互相连接,连接代码也算简单。有服务器支持可能就要逆天了,不过代码也会更复杂。

    如果正式使用,可能不太会考虑使用WebRTC,用WebSocket通过服务器进行转发可能是最佳的选择。

    WebRTC局域网P2P连接要点(实际代码其实差不多,只不过多做了点兼容):

    /******Peer A(本机)******/var peerA=new RTCPeerConnection(null,null)//开启会话,等待远程连接peerA.createOffer().then(function(offer){ peerA.setLocalDescription(offer); peerAOffer=offer;});var peerAICEList=[......] //通过peerA.onicecandidate监听获得所有的ICE连接信息候选项,如果有多个网络适配器,就会有多个候选//创建连接通道对象,A端通过这个来进行数据发送var peerAChannel=peerA.createDataChannel("RTC Test");/******Peer B(远程)******/var peerB=new RTCPeerConnection(null,null)//连接到Peer ApeerB.setRemoteDescription(peerAOffer);//开启应答会话,等待Peer A确认连接peerB.createAnswer().then(function(answer){ peerB.setLocalDescription(answer); peerBAnswer=answer;});//把Peer A的连接点都添加进去peerB.addIceCandidate(......peerAICEList)var peerBICEList=[......] //通过peerB.onicecandidate监听获得所有的ICE连接信息候选项,如果有多个网络适配器,就会有多个候选var peerBChannel=... //通过peerB.ondatachannel得到连接通道对象,B端通过这个来进行数据发送/*******最终完成连接********///连接到Peer BpeerA.setRemoteDescription(peerBAnswer);//把Peer B的连接点都添加进去peerA.addIceCandidate(......peerBICEList)/*peerA peerB分别等待peerA/BChannel.onopen回调即完成P2P连接,然后通过监听peerA/BChannel.onmessage获得对方发送的信息,通过peerA/BChannel.send(data) 发送数据。*/

    (2)音频采集和编码

    由于是在我的Recorder库中新加的demo,因此音频采集和编码都是现成的,Recorder库有好的兼容性和稳定性,因此节省了最大头的工作量。

    编码最佳使用MP3格式,因为此格式已优化了实时编码性能,可做到边录边转码,16kbps 16khz的情况下可做到2kb每秒的文件大小,音质还可以,实时传输时为3kb每秒,15分钟大概3M的流量。

    用wav格式也可以,不过此格式编码出来的数据量太大,16位 16khz接近50kb每秒的实时传输数据,15分钟要37M多流量。其他格式由于暂未对实时编码进行优化,使用中会导致明显卡顿。

    降噪、静音检测等高级功能是没有的,毕竟是非专业人员 要求高点可以,但不要超出范围太多啦。

    (3)音频实时接收和播放

    接收到一个音频片段后,本应该是立即播放的,但由于编码、网络传输导致的延迟,可能上个片段还未播放完(甚至未开始播放),因此需要缓冲处理。

    因为存在缓冲,就需要进行实时同步处理,如果缓冲内积压了过多的音频片段,会导致语音播放滞后太多,因此需要适当进行对数据进行丢弃,实测发现网络正常、设备性能靠谱的情况下基本没有丢弃的数据。

    然后就是播放了,本应是播完一个就播下一个,测试发现这是不靠谱的。因为结束一个片段后再开始播放下一个发出声音,这个过程会中断比较长时间,明显感觉得出来中间存在短暂停顿。因此必须在片段未播完时准备好下一个片段的播放,并且提前开始播放,达到抹掉中间的停顿。

    我写了两个播放方式:

    1. 实时解码播放
    2. 双Audio轮换播放

    最开始用一个Audio停顿感太明显,因此用两个Audio轮换抹掉中间的停顿,但发现不同格式Auido播放差异巨大,播放wav非常流畅,但播放mp3还是存在停顿(后面用解码的发现是得到的PCM时长变长了,导致事件触发会出现误差,为什么会变长?怪异)。

    因此后面写了一个解码然后再播放,mp3这次终于能正常连续播放了,wav格式和双Audio的播放差异不大。实时解码里面也用到了双Audio中的技巧,其实也是用到了两个BufferSource进行类似的轮换操作,以抹掉两个片段间的停顿。

    不过最终播放效果还是不够好,音质变差了点,并且多了点噪音。如果有现成的播放代码拿过来用就就好了。

    三、应用场景

    1. 数据传输改成WebSocket,做个仿微信语音通话H5版还是可以的(受限于Recorder浏览器支持)
    2. 局域网H5版对讲机(前端玩具)
    3. ......没有想到

    完。

    展开全文
  • 语音及视频通话

    2015-07-28 15:15:24
    sipdroid语音及视频通话实例源码,为Android客户端而开发,以前写过Java的应该对此代码很熟悉,这个开源项目在国外也是受到认可的,很多视频通话应用也是在此基础上扩展修改而来,你可借鉴本源码实例包。
  • Android语音及视频通话例子

    千次下载 热门讨论 2013-07-26 23:23:20
    sipdroid语音及视频通话实例源码,为Android客户端而开发,以前写过Java的应该对此代码很熟悉,这个开源项目在国外也是受到认可的,很多视频通话应用也是在此基础上扩展修改而来,你可借鉴本源码实例包。
  • 您好群主,git上下下来后,运行testAgular的代码,...FATAL EXCEPTION: mainProcess: com.zhijiaiot.app, PID: 20123java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.zhijiaiot.ap...

    您好群主,git上下下来后,运行testAgular的代码,无法运行apk啊。请回复一下。是不是少东西?

    FATAL EXCEPTION: main

    Process: com.zhijiaiot.app, PID: 20123

    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.zhijiaiot.app/com.zhijiaiot.app.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.zhijiaiot.app.MainActivity" on path: DexPathList[[zip file "/data/app/com.zhijiaiot.app-2/base.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.zhijiaiot.app-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.zhijiaiot.app-2/lib/arm, /vendor/lib, /system/lib]]

    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)

    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)

    at android.app.ActivityThread.access$800(ActivityThread.java:151)

    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)

    at android.os.Handler.dispatchMessage(Handler.java:102)

    at android.os.Looper.loop(Looper.java:135)

    at android.app.ActivityThread.main(ActivityThread.java:5258)

    at java.lang.reflect.Method.invoke(Native Method)

    at java.lang.reflect.Method.invoke(Method.java:372)

    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

    展开全文
  • 实现了android端实时语音通话,可以本机自连也可以和别的端连接通话,默认的模式是外连模式,要想自连测试需要把Global.java中的sendToSelf静态变量改为true。本例子实现的是局域网的实时语音.rar,太多无法一一验证...
  • 呼叫中心是企业销售、客服与客户连接的桥梁,AI技术可应用于...(2)在人工外呼结束后,基于语音识别和NLP技术实现的语音质检系统可以对通话录音进行分析挖掘,自动发现违规录音,这可以规范化销售、客服工作,提高...
  • 现在,我正在尝试在其中添加语音通话功能.因此,尝试搜索一些教程,大多数使用PubNub或大多数教程基于Web应用程序.我看到了这个stackoverflow线程,并且知道可以在Firebase中使用webrtc.在尝试了一些教程之后,我编写了这...
  • 其最广泛的应用则是某些网上的IP电话,大家经常可以看到不少这种提供在线IP电话服务的网站的客户端都是使用的嵌在网页上的Java Applet程序,用来实现拨号、通话等等基本的网络电话功能; 第二种方案则是我们今天要...
  • 如需转载请联系(微信号:834436689)以获得授权导读58同城拥有数千名销售和客服人员,每年会拨打数百万小时的电话,我们构建了一套智能语音质检系统,利用语音识别技术将语音转化成文本,然后利用NLP技术对通话文本...
  • golang调用阿里云的语音通话 官方目前只给出python和java的示例,而没有go的示例,这段代码是经过测试无误的。 client4, err := dyvmsapi.NewClientWithAccessKey("cn-hangzhou", "xxxxxxxx", "xxxxxxxxxxx") if ...
  • 现在,我正在尝试在其中添加语音通话功能.因此,尝试搜索一些教程,大多数使用PubNub或大多数教程基于Web应用程序.我看到了这个stackoverflow线程,并且知道可以在Firebase中使用webrtc.在尝试了一些教程之后,我编写了这...
  • 文件名称: sipdroid下载 收藏√ [5 4 3 2 1]开发工具: Java文件大小: 4013 KB上传时间: 2013-02-26下载次数: 15详细说明:开源的voip软件,可以实现语音通话,实时对讲.-Open source voip software, voice calls, ...
  • 如果觉得下面的麻烦可以...源码功能性更好、更完善。 想测试apk请加群261074724 最新的sdk4教程地址https://blog.csdn.net/Java_lilin/article/details/84842314 前面两篇介绍了注册、拨打、接听等 参考地址htt...
  • 由于这个java限制现在我正在使用原生的android代码来录制语音通话.我设法使用native-audio录音机为录音机录制音频.问题出在本机代码中,它只记录单侧语音,传入的语音没有被记录.然后我尝试了语音通信...
  • ### 利用java socket实现即时语音通信基本思路​ 利用javax.sound.sampled 包中的方法可以很方便的实现,获取拾音器音频输入的内容,和写入音频输出的混频器中。结合socket可以实现点对点语音通话
  • 如果觉得下面的麻烦可以...源码功能性更好、更完善。 想测试apk请加群261074724  最新的sdk4教程地址 https://blog.csdn.net/Java_lilin/article/details/84842314 在前一篇我写了关于sip注册的 可以参考http...
  • 1.说明 freeswitch mod_verto提供了一个基于webrtc的js模块,该模块可以通过网页拨打电话、开...体验地址在http://blog.csdn.net/java_lilin/article/details/78391819有提到 2.由于要视频所以要编译源码的mod...
  • 如果觉得下面的麻烦可以直接到...源码功能性更好、更完善。 想测试apk请加群261074724 最新的sdk4教程地址https://blog.csdn.net/Java_lilin/article/details/84842314 linphone桌面版教程https://bl...
  • 微信语音通话(听筒模式),音量侧键不能调音量 [SOLUTION] google参考机也是如此,不过可以按如下修改:   alps\frameworks\base\media\java\android\media\AudioService.java 1.private boolean ...
  • Andriod通话处理流程

    2019-09-27 04:30:45
    Andriod通话处理流程 一、总览 1、从java端发送at命令的处理流程。 ...2、unsolicited消息从modem上报到java的流程。...4、通话相关的图标变换的...6、通话相关的语音通路切换原理、震动接口。 7、通话相关的noti...
  • 配合Android端Java版本业务逻辑,实现基本的呼叫、响铃、语音通话、视频通话的功能 nodejs_copy 将nodejs版本https://github.com/ddssingsong/webrtc_server_node 使用java写了一遍 信令相关 登录成功,返回个人...
  • android即时通话项目

    热门讨论 2014-07-22 23:54:20
    主要是为了学习android基础知识,所以做的比较简单,语音通话的降噪和回音消除都没有做,有兴趣的朋友可以继续做下去,建议用rtp实现语音传输,同时用一些开源库降噪如speex。解压后的两个文件夹分别是服务器项目和...
  • android通话处理流程

    2013-01-04 14:43:44
    一、总览 1、从java端发送at命令的处理流程。 2、unsolicited 消息从modem上报...6、通话相关的语音通路切换原理、震动接口。 7、通话相关的notification服务。 8、通话相关的各种server。 第一部分:从java端发

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 145
精华内容 58
关键字:

java通话语音

java 订阅