java语音聊天程序

  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();    
                        }    
                }    
  }   
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值