精华内容
下载资源
问答
  • 基于Java实现语音通话,可实现 1对1通话(明确对方IP地址)或者群通话(不需要知道对方IP地址),希望能帮到更多小伙伴,直接运行main方法就可以,总共三个文件,有问题留言交流。
  • 文件名称: sipdroid下载 收藏√ [5 4 3 2 1]开发工具: Java文件大小: 4013 KB上传时间: 2013-02-26下载次数: 15详细说明:开源的voip软件,可以实现语音通话,实时对讲.-Open source voip software, voice calls, ...

    文件名称: sipdroid891ea1e7dab975064c6bfd22796603ae.gif下载

      收藏√  [443d104427974206832dc4b12407db70.gif

     5  4  3  2  1 fb9128a58cbeaabbeb3718ed75079ccf.gif]

    开发工具: Java

    文件大小: 4013 KB

    上传时间: 2013-02-26

    下载次数: 15

    详细说明:开源的voip软件,可以实现语音通话,实时对讲.-Open source voip software, voice calls, intercom in real time.

    文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):

    .classpath

    .project

    .svn

    ....\entries

    ....\format

    ....\pristine

    ....\........\00

    ....\........\..\0022be84310c82c01edcfa9ed49d1571151319c4.svn-base

    ....\........\..\0040d38db98c5671fd49f7b46bf5df27f73121d0.svn-base

    ....\........\..\00907dff0296c9bf9205e6e350e613b29edeafa0.svn-base

    ....\........\..\00a7325b102bad2bd56523a329102c869febe3ba.svn-base

    ....\........\..\00eecdb2e4caa7aaa152b31170a9d87e0a4a8c6b.svn-base

    ....\........\01

    ....\........\..\0125bdc06ca520f379b21ce31263f44d5e8f42c7.svn-base

    ....\........\..\01af3f3b414ee05890a412dadea8cb81869989d7.svn-base

    ....\........\02

    ....\........\..\0200de1e8279022cc4dbd20bceadaa03dd856be4.svn-base

    ....\........\..\023d594f2eb614a2fd64ab23706e07f963aa8f47.svn-base

    ....\........\..\0282dbf04543020cba91525a26fdf4ac57079d31.svn-base

    ....\........\..\02d1e853983efbc3d4942176ecfdc0e8d5cf9202.svn-base

    ....\........\03

    ....\........\..\0300db1a8aeefc70a9c7b3fb38c27fec48a09821.svn-base

    ....\........\..\0301cdcb62ddeb3b41e241209d630f4f61155604.svn-base

    ....\........\..\0346d70d138a2b4b4762913020fbef6e88aa3730.svn-base

    ....\........\..\0375d21d4395eba23e30b333b0dc6c06cd7f9db6.svn-base

    ....\........\..\037fc3e7325115df4b7ecfe7f28780e55e6367d3.svn-base

    ....\........\04

    ....\........\..\04eb07e28778cf165fb77f17dac7fe7e9aaf3bd6.svn-base

    ....\........\05

    ....\........\..\055dfdc78322f414be41e7db10cc84f411f18331.svn-base

    ....\........\..\05d4de443c9a167f55920bd056fe717a3bd7a0c8.svn-base

    ....\........\06

    ....\........\..\064bc023deef618d0cfe885ca01ebc747149f9b4.svn-base

    ....\........\..\069d8be7cdbf28b9d1012dca7338373123993fe6.svn-base

    ....\........\07

    ....\........\..\070aaa61de709fbdb72ff6992ea43393fbd8c9f9.svn-base

    ....\........\..\072318426e281fc115eac97336accc69ad94c556.svn-base

    ....\........\..\0744b53c38da99f2edfc667fd0edd6f66eb2d082.svn-base

    ....\........\..\07bc6f253d5ca6892499f0ac9b55b7876297676a.svn-base

    ....\........\..\07e8f319226fa41a579fd84a52cc098d3194938e.svn-base

    ....\........\08

    ....\........\..\0815558ddf30b177d6a82e571211f127bb1cf5cc.svn-base

    ....\........\..\08b1922ad36d46d9ae443927b2c8c3367b8d8405.svn-base

    ....\........\..\08e7b06e009b704e5a9130d0f657276a9d5b7728.svn-base

    ....\........\09

    ....\........\..\098c74acb7b4e8ad6e87352f97141353f0ef547b.svn-base

    ....\........\..\09c6112afe9ac09643266400a37f2da59d4c87c6.svn-base

    ....\........\..\09e2d3749dd030d7519f0a04f96bc16abb4d3a95.svn-base

    ....\........\0a

    ....\........\..\0a5a62edbe5d20c9b3817df7b9bdb4b91bfe9f42.svn-base

    ....\........\..\0a733399e3afb5432c201df45ec5040d37a4adda.svn-base

    ....\........\..\0ab1a5f073c809e5e645d59f538358e5eaecdd6b.svn-base

    ....\........\..\0adc222f52ac04ad4c0ba5279772c0569fbb57c7.svn-base

    ....\........\0b

    ....\........\..\0be2f83efd4c5088144ac6fe0525921bb4916e38.svn-base

    ....\........\..\0bf03f4735cc2c8fab9e27d85b41d80aaad04e7f.svn-base

    ....\........\0c

    ....\........\..\0c254561d73e16ee28a97207af194a3352b81cad.svn-base

    ....\........\..\0c2ee4258316342771deb8beaf539236a4604f4c.svn-base

    ....\........\..\0c554c6d6111501f6231104f3a482216f90428b3.svn-base

    ....\........\..\0cf4d56a3981b841c84e7965696c5685a52843d5.svn-base

    ....\........\0d

    ....\........\..\0dac6f73fb1f7a6b478faaed92a7c8ee137bb807.svn-base

    ....\........\..\0dd9d16080205e9b04403a46b28445588e36c807.svn-base

    ....\........\..\0ddf2d272807802139e9614f7a259f1b1dcc9dfe.svn-base

    ....\........\0e

    ....\........\..\0eb6c648412051218af28c708beb29b3dfdf5b75.svn-base

    ....\........\0f

    ....\........\..\0f213321c63a83c19ab735e4724b7138e2abd3d3.svn-base

    ....\........\..\0f6b9404f727a67f6c1d70d2b6d020a8023de2ac.svn-base

    ....\........\..\0fa077ae074b5dd3858518648f4f20b412de5cd5.svn-base

    ....\........\..\0fc4fb7c80d3a831051336fd167169c46ccb67e5.svn-base

    ....\........\10

    ....\........\..\104f0e9850fa659e08d54ce8aff42a394b6b13b0.svn-base

    ....\........\..\1066796d2b5440134d4d7a36bb51c8da2ad3fd9b.svn-base

    ....\........\..\107580faf68d75a5c8c3b89461600579aa4599d5.svn-base

    ....\........\..\10f6bd8d88366eea28614ab67aae1961ec5c7e52.svn-base

    ....\........\11

    ....\........\..\1101bd29e4382d85ffd2ac1a6f8e7e451ca3c240.svn-base

    ....\........\..\11ace9cdf5228a2b0f674e1ab296678d56806c7c.svn-base

    ....\........\12

    ....\........\..\1281256ff1741198c60c33db9cfe350a3b9aa205.svn-base

    ....\........\..\129a2aadd4c1066f748e773db11e1bc3dd7627a7.svn-base

    ....\........\..\12bfe1f3053c33433ffad7c00794bb2ba868f8b1.svn-base

    ....\........\..\12d5fded4f2796114f2c48e1f2aa65fbaa515fd9.svn-base

    ....\........\13

    ....\........\..\13604bb8af6c4664a381982114632f2d8e92a1b7.svn-base

    ....\........\..\136f5b9adb07048f1919881bcc98a7b33d89bffe.svn-base

    ....\........\..\13948367871daa88886798d0f896a6c0febf8db1.svn-base

    ....\........\..\13fd614d2142854521a6c5c255a6c05c877611d9.svn-base

    ....\........\14

    ....\........\..\145103fe88d4db227fae277705bf4366bfd8ecd8.svn-base

    ....\........\15

    ....\........\..\150343cf11b0210e9bca2c3bd5b45d3d5e9b2950.svn-base

    ....\........\..\156a0d287a7fc687c28d9a92fd5deae94ebfece0.svn-base

    ....\........\..\157f7551459b92c1fa478408533cf79e818bfe0f.svn-base

    ....\........\..\159fc01edc90a1d4673bba8dfaa37b152e192362.svn-base

    ....\........\16

    ....\........\..\16a14e5a72a9198f65353879553354127bc9ed51.svn-base

    ....\........\17

    输入关键字,在本站238万海量源码库中尽情搜索:

    帮助

    [Website.zip] - Website for Cheap last minute vacations and all inclusive vacation packages combine excitement, spontaneity, and best of all, savings

    [T49.rar] - 魔力宝贝 FZ 雪塔练级~队长版本。 自己写的很好用

    [acc.rar] - 用vc开发的基于UDP协议的点对点语音通信软件。

    [voip.rar] - VoIP模块,网络电话,将模拟的声音讯号引经过压缩与封包之后,以数据封包的形式在IP网络进行语音讯号的传输

    [jvoip.rar] - voip程序 支持点对点的语音通信 支持多种语音编码

    [NetmeetingServer5.0.rar] - 一个网络会议系统的服务器端,可用于多人语音,文字聊天,白板画图

    [freepbx-2.4.0.rar] - freepbx asterisk SIP

    [SER SIP server 快速安裝.rar] - 详细介绍了如何在linux下来安装MYSQL与ser,以及如何来把ser改为应用到MYSQL的数据库里。

    [p2psip.rar] - sip p2p的很好实现,学习p2p voip 好工具

    [AndroidVoIPSipdroid.rar] - Sipdroid是一个运行于Android手机平台上的SIP/VoIP客户端,源码开源完整,有助于帮助Android爱好者掌握一些Android编程知识,尤其是SIP/VoIP客户端程序的编写方面。

    展开全文
  • 其最广泛的应用则是某些网上的IP电话,大家经常可以看到不少这种提供在线IP电话服务的网站的客户端都是使用的嵌在网页上的Java Applet程序,用来实现拨号、通话等等基本的网络电话功能; 第二种方案则是我们今天要...
  • 最近在研究语音识别,使用百度的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 麦克风自动录音的资料请关注脚本之家其它相关文章!

    展开全文
  • 实现了android端实时语音通话,可以本机自连也可以和别的端连接通话,默认的模式是外连模式,要想自连测试需要把Global.java中的sendToSelf静态变量改为true。本例子实现的是局域网的实时语音.rar,太多无法一一验证...
  • Java 语音实时

    2015-06-10 21:48:42
    Java实现实时通话 通过Socket来实现的 要的就来下载吧
  • ### 利用java socket实现即时语音通信基本思路​ 利用javax.sound.sampled 包中的方法可以很方便的实现,获取拾音器音频输入的内容,和写入音频输出的混频器中。结合socket可以实现点对点语音通话

    ### 利用java socket和sampled实现点对点即时语音通信

    基本思路

    ​ 利用javax.sound.sampled 包中的方法可以很方便的实现,获取拾音器音频输入的内容,和写入音频输出的混频器中。结合socket可以实现点对点语音通话。

    需要用到的类

    AudioFormat类

    ​ 是在声音流中指定特定数据安排的类。通过检查以音频格式存储的信息,可以发现在二进制声音数据中解释位的方式。每个数据行都有与其数据流相关的音频格式。源(回放)数据行的音频格式指示数据行期望接收输出的数据类型。对于目标(捕获)数据行,音频格式指定可以从该行读取的数据种类。当然,声音文件也有音频格式。AudioFileFormat

    类封装 AudioFormat 以及其他特定于文件的信息

    TargetDataLine类

    ​ 目标数据行是可以从中读取音频数据的某种类型的 DataLine。最常见的示例是从音频捕获设备获取其数据的数据行。(该设备被实现为写入目标数据行的混频器。)

    SourceDataLine类

    ​ 源数据行是可以写入数据的数据行。它充当其混频器的源。应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标(它可表示声卡上的音频输出设备)

    AudioSystem类

    AudioSystem
    类充当取样音频系统资源的入口点。此类允许查询和访问安装在系统上的混频器。AudioSystem
    包括许多在不同格式间转换音频数据的方法,以及在音频文件和流之间进行转换的方法。它还提供不用显式处理混频器即可直接从
    AudioSystem 获得 Line 的方法

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

    Obtains a line that matches the description in the specified Line.Info object. 
    
    If a DataLine is requested, and info is an instance of DataLine.Info specifying at least one fully qualified audio format, the last one will be used as the default format of the returned DataLine. 
    
    If system properties javax.sound.sampled.Clip, javax.sound.sampled.Port, javax.sound.sampled.SourceDataLine and javax.sound.sampled.TargetDataLine are defined or they are defined in the file "sound.properties", they are used to retrieve default lines. For details, refer to the class description. If the respective property is not set, or the mixer requested in the property is not installed or does not provide the requested line, all installed mixers ar  e queried for the requested line type. A Line will be returned from the first mixer providing the requested line type.

    具体实现

    1、获取目标数据行,这里是从音频捕获设备(拾音器)获取其数据的数据行

    ​ 在本应用中从音频捕获设备(拾音器)获取其数据的数据行,会发送给对方作为对方的音频源数据。

    // 1.获取音频流数据
    // af为AudioFormat也就是音频格式
    AudioFormat af = getAudioFormat();
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, af);
    // 这里的td实际上是
    TargetDataLine targetDataLine = (TargetDataLine) (AudioSystem.getLine(info));
    // 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
    targetDataLine.open(af);
    // 允许某一数据行执行数据 I/O
    targetDataLine.start();
    
    //将数据读取到bts中
    int len = targetDataLine.read(bts, 0, bts.length);

    2、获取源数据行 ,将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标(它可表示声卡上的音频输出设备)

    ​ 在本应用中对方发送过来的数据 会写入到源数据行中,输出到音频输出设备。

    // 2.从音频流获取数据
    dataLineInfo = new DataLine.Info(SourceDataLine.class, af);
    sd = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
    // 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
    sd.open(af);
    // 允许某一数据行执行数据 I/O
    sd.start();
    //2.向源数据行中写入数据,写入后会自动播放 
    sourceDataLine.write(bts, 0, len);              

    3.利用socket实现通信

    ​ 在socket 中服务端 和 客户端 的数据传递时一致

    需要注意的是 在client类和server类的run方法的while循环中 ,要先进行写、再进行读操作 ,不然socket的读取流会阻塞
    这里写图片描述

    代码实现

    AudioUtils类 这是一个工具类

    主要用来初始化 和获取SourceDataLine和TargetDataLine

    import javax.sound.sampled.AudioFormat;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.DataLine;
    import javax.sound.sampled.DataLine.Info;
    import javax.sound.sampled.LineUnavailableException;
    import javax.sound.sampled.SourceDataLine;
    import javax.sound.sampled.TargetDataLine;
    
    public class AudioUtils {
    
        private static AudioFormat af;
        private static Info info;
        private static TargetDataLine td;
        private static Info dataLineInfo;
        private static SourceDataLine sd;
    
        /**
         * 获取音频流数据(从拾音器)
         * 
         * @return TargetDataLine
         * @throws LineUnavailableException
         */
        public static TargetDataLine getTargetDataLine() throws LineUnavailableException {
            if (td != null) {
                return td;
            } else {
                    // 1.获取音频流数据
                    // af为AudioFormat也就是音频格式
                    af = getAudioFormat();
                    info = new DataLine.Info(TargetDataLine.class, af);
                    // 这里的td实际上是
                    td = (TargetDataLine) (AudioSystem.getLine(info));
                    // 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
                    td.open(af);
                    // 允许某一数据行执行数据 I/O
                    td.start();
                return td;
            }
    
        }
        /**
         * 获取混编器 写入数据会自动播放
         * 
         * @return SourceDataLine
         * @throws LineUnavailableException
         */
        public static SourceDataLine getSourceDataLine() throws LineUnavailableException {
            if (sd != null) {
                return sd;
            } else {
                    // 2.从音频流获取数据
                    dataLineInfo = new DataLine.Info(SourceDataLine.class, af);
                    sd = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
                    // 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
                    sd.open(af);
                    // 允许某一数据行执行数据 I/O
                    sd.start();
    
                return sd;
            }
        }
    
        /**
         * 设置AudioFormat的参数
         * 
         * @return AudioFormat
         */
        public static AudioFormat getAudioFormat() {
            AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
            float rate = 8000f;
            int sampleSize = 16;
            String signedString = "signed";
            boolean bigEndian = true;
            int channels = 1;
            return new AudioFormat(encoding, rate, sampleSize, channels, (sampleSize / 8) * channels, rate, bigEndian);
        }
    
        /**
         * 关闭资源
         */
        public static void close() {
            if (td != null) {
                td.close();
            }
            if (sd != null) {
                sd.close();
            }
    
        }
    }
    Server类
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import javax.sound.sampled.AudioFormat;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.DataLine;
    import javax.sound.sampled.LineUnavailableException;
    import javax.sound.sampled.SourceDataLine;
    import javax.sound.sampled.TargetDataLine;
    
    /**
     * 主要实现局域网通讯中服务端的功能
     * 
     * @author Administrator
     */
    public class Server {
        private OutputStream out;
        private InputStream in;
        private ServerSocket serverSocket;
        private Socket socket;
        //private int counter = 1;
        private byte[] bos=new byte[2024];
        //private static ByteArrayOutputStream baos;
        private  byte[] bis=new byte[2024];
    
        public Server() {
    
            startServer();
        }
    
        private void startServer() {
            try {
                serverSocket = new ServerSocket(9000, 20);
                    // 等待连接
                    System.out.println("服务端:等待连接");
                    socket = serverSocket.accept();
                    out = socket.getOutputStream();
                    // out.flush();
                    System.out.println("服务端:连接成功");
                    // 保持通讯
                    in = socket.getInputStream();
    
                    TargetDataLine targetDataLine = AudioUtils.getTargetDataLine();
    
                    SourceDataLine sourceDataLine = AudioUtils.getSourceDataLine();
                    while (true) {
                        System.out.println("server:");
    
                        /**
                         * 这里一定要先发再收  不然socket的读取流会阻塞
                         */
    
                        //获取音频流
                        int writeLen = targetDataLine.read(bos,0,bos.length);
                        //发
                        if (bos != null) {
                            //向对方发送拾音器获取到的音频
                            System.out.println("rerver 发");
                            out.write(bos,0,writeLen);
                        }
    
                        //收
                        int readLen = in.read(bis);
                        if (bis != null) {
                            //播放对方发送来的音频
                            System.out.println("rerver 收");
                            sourceDataLine.write(bis, 0, readLen);
                        }
                    }
    
    
            } catch (Exception ex) {
                Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        public static void main(String args[]) {
            new Server();
        }
    
    }
    client类
    package 及时通信;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import javax.sound.sampled.AudioFormat;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    import javax.sound.sampled.DataLine;
    import javax.sound.sampled.SourceDataLine;
    import javax.sound.sampled.TargetDataLine;
    
    /**
     *
     * @author Administrator
     */
    public class Client {
        private OutputStream out;
        private InputStream in;
        private Socket socket;
        private byte[] bos=new byte[2024];
        //private static ByteArrayOutputStream baos;
        private static byte[] bis=new byte[2024];
    
        public Client() {
            startClient();
        }
    
        private void startClient() {
            try {
                //这里需要根据自己的ip修改
                socket = new Socket("192.168.43.52", 9000);
    
                out = socket.getOutputStream();
                System.out.println("客户端:连接成功");
                // 保持通讯
                in = socket.getInputStream();
    
                TargetDataLine targetDataLine = AudioUtils.getTargetDataLine();
    
                SourceDataLine sourceDataLine = AudioUtils.getSourceDataLine();
                while (true) {
                    System.out.println("Client:");
    
                        //获取音频流
                        int writeLen = targetDataLine.read(bos,0,bos.length);
                        //发
                        if (bos != null) {
                            //向对方发送拾音器获取到的音频
                            System.out.println("Client 发");
                            out.write(bos,0,writeLen);
                        }
                        //收
                        int readLen = in.read(bis);
                        if (bis != null) {
                            //播放对方发送来的音频
                            System.out.println("Client 收");
                            sourceDataLine.write(bis, 0, readLen);
                        }
    
                }
    
            } catch (Exception ex) {
                Logger.getLogger(Client.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    
        public static void main(String args[]) {
            new Client();
        }
    }
    展开全文
  • 呼叫中心是企业销售、客服与客户连接的桥梁,AI技术可应用于...(2)在人工外呼结束后,基于语音识别和NLP技术实现语音质检系统可以对通话录音进行分析挖掘,自动发现违规录音,这可以规范化销售、客服工作,提高...
    呼叫中心是企业销售、客服与客户连接的桥梁,AI技术可应用于销售、客服人工外呼的不同阶段以创造价值:(1)在人工外呼前期,基于语音识别、NLP和自动对话技术实现的智能语音机器人能够代替人工与用户进行沟通,这可以有效减少人工拨打电话量,提高整体人效。(2)在人工外呼结束后,基于语音识别和NLP技术实现的语音质检系统可以对通话录音进行分析挖掘,自动发现违规录音,这可以规范化销售、客服工作,提高客户服务质量。2019年11月2日,58同城AI Lab负责人詹坤林在第十一届中国系统架构师大会(SACC)人工智能算法与应用实践专场上分享了《智能语音应用助力呼叫中心提高人效和服务质量》,以下是分享PPT内容。

    117faa06dca7eacb76ad3d8b7c36b575.png

    9b813a49a31c0810f1cef5579d737fb8.png

    64871f16b5143fbb87b8618e267dffdc.png

    以下是分享PPT内容:

    01c3b924030e371991c569ae769afe26.png

    e16fe80c10a41006ad1336ee15eac289.png

    301895db8476f30612072e7d7208601b.png

    72aab1333e27051f8ab7ea6bb895a90d.png

    2c105d903ec582e4250dec7578098ea4.png

    c8b005025b39bf6b517777398a317bf7.png

    2ca6fc4df85483e142be42976f43dbff.png

    4a2d66fb7ebd8e8fe16043fb7cd7ea20.png

    7475d0de0520fe2c41868cc9e1ad66cd.png

    4aa1a6cd320b67f5b2c9bdc319fb8b11.png

    67ff36559106d34bdb5a0a2bd5f6c60d.png

    f685ce9b37148ae2cc781961dd5590c7.png

    68f1ff30741cbc46b21a9a3b7bcee3ed.png

    282799aefd68691ccfb4070806d6a885.png

    54f9a28a3e43141d2f5ad8a46947a7a2.png

    6e1943c0ffe5aefc0afb5b160cc44273.png

    9d84ef1f4fd267b065de71eda1ff3e22.png

    3b21035f13955591175e618e83da8dd5.png

    9e9f253c2114fa7980913631c354c320.png

    0125a7828d2d99fbc6fe8daa10508aba.png

    478160fba20867d9c9fb546deddff28b.png

    15e1e215af949202bb29e481b6efdaa1.png

    35aed6e985a998f8f116b1e4d654dccc.png

    c68085f9aec3d3ef61977fb0faa6c9ed.png

    8f8b35fed619aa670fa61c28c8ea2e7f.png

    e8d04e782a5b991006371f4e4f95dadc.png

    9205543bca6d54a5be6c0d4f10137b02.png

    3d86f36be2f3ca603375f705d84af457.png

    3a53e2fb0673715ea0bb355484bfa442.png

    69e9e9aeb35d0cc83f5160ca0060555e.png

    b49b023f7fa8586c0b05d8e137d0722b.png

    42228c72e618c94ee6b4d5cdf57858a5.png

    aa48ec942d94ed37e7e9146210f00c48.png

    84534fd378aa6d7f954196dc020a8983.png

    0054da25c64314febfab15b0800fc6f8.png

    cc8e6d118cab581799034cd384d3d1be.png

    3b25bae7ab5c8c37a082fbf5ee304449.png

    b04e65dc7fb67a012c568ca2ebc31649.png

    求Java后端、NLP、机器学习、语音识别、语音合成方向人才,欢迎联系 zhankunlin@58.com

    展开全文
  • 834436689)以获得授权导读58同城拥有数千名销售和客服人员,每年会拨打数百万小时的电话,我们构建了一套智能语音质检系统,利用语音识别技术将语音转化成文本,然后利用NLP技术对通话文本进行分析挖掘,实现机器...
  • 1、秒嘀科技 - 短信接口、短信验证码、语音验证码、短信平台最低充值120,单价0.048元/条;一次性充值36000时,单价0.036/条2、容联云通讯_提供通话、短信、视频、呼叫中心、IM、流量等通讯能力基础价0.06元/条;当...
  • android即时通话项目

    热门讨论 2014-07-22 23:54:20
    主要是为了学习android基础知识,所以做的比较简单,语音通话的降噪和回音消除都没有做,有兴趣的朋友可以继续做下去,建议用rtp实现语音传输,同时用一些开源库降噪如speex。解压后的两个文件夹分别是服务器项目和...
  • 配合Android端Java版本业务逻辑,实现基本的呼叫、响铃、语音通话、视频通话的功能 nodejs_copy 将nodejs版本https://github.com/ddssingsong/webrtc_server_node 使用java写了一遍 信令相关 登录成功,返回个人...
  • android端RTP实时语音测试用例

    热门讨论 2014-06-10 10:45:57
    实现了android端实时语音通话,可以本机自连也可以和别的端连接通话,默认的模式是外连模式,要想自连测试需要把Global.java中的sendToSelf静态变量改为true。本例子实现的是局域网的实时语音。
  • 仿微信语音对话简单模型

    万次阅读 热门讨论 2012-05-31 00:34:48
    根据需求要来实现一个类似微信的语音通话效果,想来下,现在来实现一个简单那的模型,可供遇到的人可作参考: 废话不多说就直接贴代码吧: RecoderDemo.java: package com.jankey.record; import java.io....
  • 前面分别实现了baresip android 语音、视频 参考地址https://blog.csdn.net/Java_lilin/article/details/100039464 本文对接通后获取双方的语音用讯飞实时语音转写来识别 (如果觉得麻烦可以去...
  • 一、综述 学习使用Java开发语言做计算机音频数据采集、...为了测试语音通话,音频采样率为8KHz即可满足要求。 2. 在数字音频领域,常用的采样率有: 8,000 Hz - 电话所用采样率, 对于人的说话已经足够 11,025 Hz-AM...
  • 手机MSN v6.0.2 java

    2011-03-04 10:32:56
    手机MSN是著名的即时聊天软件MSN(Windows Live Messenger)的手机版本,通过移动运营商的...沟通:IM聊天、打招呼、同步PC联系人分组、语音通话、查找交友 丰富多样的实时聊天功能 同步PC联系人分组,支持查找联系人
  • Java框架怎么学?

    2021-02-24 13:51:33
    框架怎么学? ...框架要完成一个功能,需要你操作一定的步骤,就像你用微信打电话,得点+号,选择语音通话,点击即可。 3,框架会用了。 4,框架的内部实现原理。 5,自定义框架。造一个。 ...
  • java 用于branch:master 产品特点 已完成 支持一对一的语音和视频 支持多对多语音和视频会议 灵活配置信令服务器和电击/转弯穿透服务器 动态权限申请 将核心代码封装到SDK中 呼叫,响铃和拨号的全过程 进行中 各种...
  • 官网上写的是四行代码实现语音。其实的话中间还是有些问题存在的。就是建议使用demo里的workthread 和他的eventhandler 因为文档中说明 创建RtcEngine 和调用最好在一个线程。所以最后自己创建一个子线程用来创建...
  • 在外观方面,4G LTE 版的 3310 跟此前版本并没有任何差别,依旧经典的外观设计,但内在改变了不少,首先就是对 4G 网络的支持,可实现 VoLTE 高清语音通话功能,当然,4G 上网对于一台这样的功能机来说,并没有太大...
  • 很多公司的做法可能就是直接在业务系统中自己去实现类似及时通讯、短信群发、组织架构信息管理、视频通话‘、语音通话、在线互传文件,这样在你们业务系统中去实现这些功能对于一些公司而言难免会比较大,又或者是...
  • 比如,通话时长,从通话开始时计时到通话结束,是有毫秒数的,但是显示要按照时分秒格式显示”HH:mm:ss”,小于10的要自动在前面补0。如:【语音对讲】03:40 如下工具类可实现: public class Time { public ...
  • 上篇文章写完被叫,我们这里肯定先写主叫,这里值得注意的是,暂不支持两台终端同时连接(在改进,后面在发出来),我们会通过shell/bat脚本文件去实现运行; VoLTE视频通话呼通率: 代码如下:匆匆忙忙写的,...
  • 比较常见的例子:通话录音,微信语音以及录音等!这个鬼,用两个字来形容,就是“蛋疼”;因为HTML5压根就不支持它(amr:我是个《孤儿》 ,导演:佐米·希尔拉);所以,试听效果也就很难实现了!虽然微信是提供试听的...
  • 比较常见的例子:通话录音,微信语音以及录音等!但是这个鬼,用两个字来形容,就是“蛋疼”;因为HTML5压根就不支持它(amr:我是个《孤儿》 ,导演:佐米·希尔拉);所以,试听效果也就很难实现了!虽然微信是提供...
  • android RILJ运行机制

    千次阅读 2017-03-15 14:50:46
    如我们所知,和phone相关的framwork层命令,最后都都会传送到RIL,最终完成语音通话,服务网络状态和手机数据连接的控制和管理。  在讲解RILJ之前,我们先梳理下android的RIL框架。RIL的全名为Radio Interface ...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

java实现语音通话

java 订阅