java 语音采集组件

class Capture implements Runnable{

TargetDateLine line;//可以从中读取音频数据的某种类型的 DataLine

Thread thread;

Socket socket;

BufferedOutputStream captrueOutputStream;

Captrue(Socket socket){//构造函数,取得socket

   this.socket=socket;

}

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 e){

   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,128);//取数据(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();
           }
       }
    
}

猜你喜欢

转载自blog.51cto.com/10972685/2143993