<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      怎么捕獲音頻及輸出音頻。

      [摘要]這是我原來用過的兩段代碼,輸出音頻和捕獲音頻。 構造器里的socket是用來接受來自網絡的音頻數據。不做網絡音頻可以去掉它。希望能與大家分享經驗。8-)import java.io.*; impor...
      這是我原來用過的兩段代碼,輸出音頻和捕獲音頻。
      構造器里的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();
       }
       }



      日韩精品一区二区三区高清