网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 网站开发-> JSP技术-> 如何捕获音频及输出音频

如何捕获音频及输出音频
作者:佚名 来源:InterNet 加入时间:2005-3-24
相关文章 相关书籍:
  • Flash音频软件Sound Forge
  • 这是我原来用过的两段代码,输出音频和捕获音频。
    构造器里的socket是用来接受来自网络的音频数据。不做网络音频可以去掉它。

    希望能与大家分享经验。8-)

    import java.io.*;
    import javax.sound.sampled.*;
    import java.net.*;


    /**
    * Title:        VoiceChat
    * Description:  输出音频(放音程序)
    * Copyright:    Copyright (c) 2001
    * Company:
    * @author       你猜!
    * @version 1.0
    */


    class Playback implements Runnable {

           final int bufSize = 16384;
           SourceDataLine line;
           Thread thread;
           Socket s;

           Playback(Socket s){//构造器 取得socket以获得网络输入流
             this.s=s;
           }
           public void start() {

               thread = new Thread(this);
               thread.setName("Playback");
               thread.start();
           }

           public void stop() {
               thread = null;
           }

           public void run() {

               AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
               BufferedInputStream playbackInputStream;

               try {
                 playbackInputStream=new BufferedInputStream(new AudioInputStream(s.getInputStream(),format,2147483647));//封装成音频输出流,如果网络流是经过压缩的需在此加套解压流
               }
               catch (IOException ex) {
                   return;
               }

               DataLine.Info info = new DataLine.Info(SourceDataLine.class,format);

               try {
                   line = (SourceDataLine) AudioSystem.getLine(info);
                   line.open(format, bufSize);
               } catch (LineUnavailableException ex) {
                   return;
               }

               byte[] data = new byte[1024];//此处数组的大小跟实时性关系不大,可根据情况进行调整
               int numBytesRead = 0;
               line.start();

               while (thread != null) {
                  try{
                     numBytesRead = playbackInputStream.read(data);
                     line.write(data, 0,numBytesRead);
                  } catch (IOException e) {
                       break;
                   }
               }

               if (thread != null) {
                   line.drain();
               }

               line.stop();
               line.close();
               line = null;
           }
    }


    import java.io.*;
    import javax.sound.sampled.*;
    import java.net.*;

    /**
    * Title:        VoiceChat
    * Description:  音频捕捉(录音程序)
    * Copyright:    Copyright (c) 2001
    * Company:
    * @author       你猜!
    * @version 1.0
    */

    class Capture implements Runnable {

           TargetDataLine line;
           Thread thread;
           Socket s;
           BufferedOutputStream captrueOutputStream;

           Capture(Socket s){//构造器 取得socket以获得网络输出流
             this.s=s;
           }

           public void start() {

               thread = new Thread(this);
               thread.setName("Capture");
               thread.start();
           }

           public void stop() {
               thread = null;
           }

           public void run() {

               try {
                 captrueOutputStream=new BufferedOutputStream(s.getOutputStream());//建立输出流 此处可以加套压缩流用来压缩数据
               }
               catch (IOException ex) {
                   return;
               }

               AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
               DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);

               try {
                   line = (TargetDataLine) AudioSystem.getLine(info);
                   line.open(format, line.getBufferSize());
               } catch (Exception ex) {
                   return;
               }

               byte[] data = new byte[1024];//此处的1024可以情况进行调整,应跟下面的1024应保持一致
               int numBytesRead=0;
               line.start();

               while (thread != null) {
                   numBytesRead = line.read(data, 0,1024);//取数据(1024)的大小直接关系到传输的速度,一般越小越快,
                   try {
                     captrueOutputStream.write(data, 0, numBytesRead);//写入网络流
                   }
                   catch (Exception ex) {
                       break;
                   }
               }

               line.stop();
               line.close();
               line = null;

               try {
                   captrueOutputStream.flush();
                   captrueOutputStream.close();
               } catch (IOException ex) {
                   ex.printStackTrace();
               }
           }


    [文章录入员:nancy]

    相关文章 相关书籍:
  • Flash音频软件Sound Forge
  • 本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    JSP技术
    ASP/ASP.NET
    PHP技术
    JSP技术
    XML技术
    CGI/PERL
    WEB服务器
    WordPress专题
    其它
    电脑教程阅读排行
    ·几个常见的关于日期的问题
    ·WebLogic的初步研究(1)...
    ·WebLogic的初步研究(2)...
    ·新手入门经典:Jsp环境配置
    ·JSP动态输出Excel及中文乱...
    ·jsp基础学习资料
    ·MySQL实现分页JSP+JAV...
    ·jsp连接数据库大全
    ·Tomcat4.01全攻略
    ·JSP的安装、启动及简单示例