当前位置:  技术问答>java相关

java 如何录音?

    来源: 互联网  发布时间:2015-02-08

    本文导语:  目的,实时的语音传输,可能吗? 谢谢。 | 这是我实现的基于JMF的RTP实时语音采集和传输程序: /**  * 采集语音和发送RTP流的JavaBean  * @author:sharetop  * @version:1.0.0  *  * date:2001-6-26  */ import javax.med...

目的,实时的语音传输,可能吗?
谢谢。

|

这是我实现的基于JMF的RTP实时语音采集和传输程序:
/**
 * 采集语音和发送RTP流的JavaBean
 * @author:sharetop
 * @version:1.0.0
 *
 * date:2001-6-26
 */

import javax.media.*;
import javax.media.format.*;
import javax.media.rtp.*;
import javax.media.rtp.rtcp.*;
import javax.media.protocol.*;
import javax.media.rtp.event.*;
import javax.media.control.*;

import java.util.*;
import java.io.*;
import java.net.*;

import com.sitechasia.debug.Code;

public class RTPVoiceSender
{
private Processor mProcessor = null;
private RTPManager mRTPManager = null;
private StateHelper mStateHelper = null;
private DataSource mDataSource = null;
private SendStream mSendStream = null;

private Vector mIPAddress = null;

//  boolean haveMulticastAddress = false;

  private MonitorWindow monitorWindow=null;

public RTPVoiceSender() throws VoiceException
{
 mIPAddress = new Vector();
   init();
}

  public void addTargets(Vector userList) throws VoiceException
  {
    mIPAddress = userList;

Code.debug("--start add targets....");
 try{
   for (Enumeration e = mIPAddress.elements() ; e.hasMoreElements() ;) {
          SessionAddress destAddress = new SessionAddress(InetAddress.getByName((String)e.nextElement()),Port.AudioReceivePort,Port.TTL);
          mRTPManager.addTarget(destAddress);
System.out.println(destAddress.toString());
Code.debug(" - add one target");
    }
    mSendStream = mRTPManager.createSendStream(mDataSource,0);
    } catch (Exception e){
        throw new VoiceException("Cannot add targets: " + e.getMessage());
    }
Code.debug(" - Create Transmiter ok ...");

  }

  public void addTarget(String ip) throws VoiceException
  {
    try{
      InetAddress ipAddr = InetAddress.getByName(ip);
      SessionAddress sa = new SessionAddress(ipAddr,Port.AudioReceivePort,Port.TTL);

      mRTPManager.addTarget(sa);
      mIPAddress.add(ip);
    }catch(Exception e){
      throw new VoiceException("addTarget exception"+e.getMessage());
    }

  }

  public void removeTarget(String ip) throws VoiceException
  {
    try{
      InetAddress ipAddr = InetAddress.getByName(ip);
      SessionAddress sa = new SessionAddress(ipAddr,Port.AudioReceivePort,Port.TTL);
      mRTPManager.removeTarget(sa,"remove one target");
      mIPAddress.remove(ip);
    }catch(Exception e){
      throw new VoiceException("del user exception :"+e.getMessage());
    }
  }

private void init() throws VoiceException
{
//第一步:配置采集设备
/*****在win平台下直接用DirectSoundCapture采集
AudioFormat format = new AudioFormat(AudioFormat.ULAW,8000,8,1);
Vector devices= CaptureDeviceManager.getDeviceList( format);

    CaptureDeviceInfo di= null;
if (devices.size() > 0) {
di = (CaptureDeviceInfo) devices.elementAt(0);
}
else {
// 如果没有合适的采集设备
      throw new VoiceException("Can't detect CaptureDevice");
}
*****/
    CaptureDeviceInfo di = CaptureDeviceManager.getDevice("DirectSoundCapture");
Code.debug(" - Open capture device ok ");

//第二步:构建Processor和StateHelper
  try{
      mProcessor = Manager.createProcessor(di.getLocator());
      mStateHelper = new StateHelper(mProcessor);
} catch (IOException e) {
throw new VoiceException("IO Exception : "+e.getMessage());
    } catch (NoProcessorException e) {
throw new VoiceException("No Processor Exception: "+e.getMessage());
}
Code.debug(" - Create Processor ok ");

//第三步:configure,设置内容类型,realize
    if (!mStateHelper.configure(10000)) {
      throw new VoiceException("Error configuring processor");
    }

    mProcessor.setContentDescriptor(new ContentDescriptor( ContentDescriptor.RAW_RTP));

    TrackControl track[] = mProcessor.getTrackControls();

    boolean encodingOk = false;
    for (int i = 0; i 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • javascript开源软件 iis7站长之家
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3