myjavaBlog

          工作越努力學(xué)到的越多。
          posts - 4, comments - 7, trackbacks - 0, articles - 34

          java錄音程序源碼

          Posted on 2009-06-09 11:08 java人生 閱讀(1343) 評論(0)  編輯  收藏
          由于項(xiàng)目中有關(guān)于java錄音的東西,所以從網(wǎng)上找些資料學(xué)習(xí)一下
            1import java.io.*;
            2import javax.sound.sampled.*;
            3
            4public class JDKAudioRecorder extends Thread {
            5    // 產(chǎn)生TargetDataLine類別的變數(shù)m_targetdataline
            6    static TargetDataLine m_targetdataline;
            7
            8    // 透過TargetDataLine介面(繼承自DataLine)與音效卡溝通 target目標(biāo)
            9
           10    // 產(chǎn)生AudioFileFormat.Type類別的變數(shù)m_targetType Format格式
           11    static AudioFileFormat.Type m_targetType;
           12
           13    // 產(chǎn)生AudioInputStream類別的變數(shù)m_audioInputStream stream流
           14    static AudioInputStream m_audioInputStream;
           15
           16    static File m_outputFile;// 產(chǎn)生File類別的變數(shù) m_outputFile
           17
           18    static boolean m_bRecording;// 後面需用到布林函數(shù) True,False
           19
           20    public JDKAudioRecorder(TargetDataLine line,
           21            AudioFileFormat.Type targetType, File file) {
           22        m_targetdataline = line;
           23        m_audioInputStream = new AudioInputStream(line);
           24        m_targetType = targetType;
           25        m_outputFile = file;
           26    }

           27
           28    public static void AudioRecorder() {
           29        String Filename = "c://JDKAudioRecord.wav";
           30        File outputFile = new File(Filename);
           31
           32        // 我們一開始先在主程式裡指定聲音檔的檔名為
           33        // JDKAudioRecorder.wav
           34        // String Filename = "JDKAudioRecord.wav";
           35        // 接著指定存檔的資料夾,預(yù)設(shè)存在相同的資料夾
           36        // FileoutputFile = new File(Filename);
           37
           38        AudioFormat audioFormat = null;
           39        audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
           40                44100.0F162444100.0Ffalse);
           41
           42        // 再來設(shè)定和取得音效檔的屬性
           43        // audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
           44        // 44100.0F, 16, 2, 4, 44100.0F, false);
           45
           46        DataLine.Info info = new DataLine.Info(TargetDataLine.class,
           47                audioFormat);
           48        TargetDataLine targetDataLine = null;
           49
           50        // 然後透過TargetDataLine介面(繼承自DataLine)與音效卡溝通
           51        // DataLine.Info info = new DataLine.Info(TargetDataLine.class,
           52        // audioFormat);
           53        // 接著做例外處理,當(dāng)聲音裝置出錯(cuò)或其他因素導(dǎo)致錄音功能無法被執(zhí)行時(shí),程式將被終止
           54
           55        try {
           56            targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
           57            targetDataLine.open(audioFormat);// try{ }可能發(fā)生例外的敘述
           58
           59        }
           catch (LineUnavailableException e)// catch{ }處理方法
           60
           61        {
           62            System.out.println("無法錄音,錄音失敗");
           63            e.printStackTrace();
           64            System.exit(-1);
           65        }

           66
           67        AudioFileFormat.Type targetType = AudioFileFormat.Type.AU;
           68        JDKAudioRecorder recorder = null;
           69
           70        recorder = new JDKAudioRecorder(targetDataLine, targetType, outputFile);
           71        recorder.start();
           72    }

           73
           74    public void start() {
           75        m_targetdataline.start();
           76        super.start();
           77    }

           78
           79    public static void stopRecording() {
           80        
           81        m_targetdataline.stop();
           82        m_targetdataline.close();
           83        m_bRecording = false;
           84    }

           85
           86    public void run() {
           87        try {
           88            AudioSystem.write(m_audioInputStream, m_targetType, m_outputFile);
           89            System.out.println("after write()");
           90        }
           catch (IOException e) {
           91            e.printStackTrace();
           92        }

           93    }

           94    
           95}

           96// 一切準(zhǔn)備ok後,開始呼叫DataLine類別中的start()method即可
           97// 開始錄音,停止錄音則透過stopRecording()method
           98// public void start()
           99//{
          100//m_targetdataline.start();
          101//}
          102// public static void stopRecording()
          103//{
          104//m_targetdataline.stop();
          105//}
          106

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 济阳县| 嘉义县| 白沙| 蛟河市| 开化县| 图木舒克市| 庆阳市| 武汉市| 无锡市| 耿马| 广州市| 龙胜| 湟源县| 亳州市| 滨州市| 调兵山市| 哈尔滨市| 汶上县| 桐梓县| 建湖县| 江油市| 瑞丽市| 永济市| 莫力| 青浦区| 青海省| 屯昌县| 商丘市| 伊川县| 怀仁县| 南涧| 连云港市| 辽中县| 霍山县| 科技| 三门县| 庆阳市| 湖口县| 宜宾市| 乐至县| 云安县|