Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 實時獲取麥克風輸入音量的代碼

Android 實時獲取麥克風輸入音量的代碼

編輯:Android開發實例

Android 上有一些很有趣的應用,例如《吹裙子》、《吹氣球》之類的。利用的是實時獲取麥克風輸入音量,然後進行相應的處理。錄音過程中怎樣獲得聲音的大小呢?網上也不少人問如何處理這個事情,也有一些解答,不過都沒有實際的代碼。簡單摸索了一下,寫了個小 Demo 試了試,果然可以。給大家共享一下。
不解釋代碼了,大家看注釋。

 

package com.xxiyy.spl;    import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.util.Log;    public class RecordThread extends Thread {     private AudioRecord ar;     private int bs;     private static int SAMPLE_RATE_IN_HZ = 8000;     private boolean isRun = false;        public RecordThread() {         super();         bs = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ,                 AudioFormat.CHANNEL_CONFIGURATION_MONO,                 AudioFormat.ENCODING_PCM_16BIT);         ar = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ,                 AudioFormat.CHANNEL_CONFIGURATION_MONO,                 AudioFormat.ENCODING_PCM_16BIT, bs);     }        public void run() {         super.run();         ar.startRecording();                 // 用於讀取的 buffer         byte[] buffer = new byte[bs];         isRun = true;         while (isRun) {             int r = ar.read(buffer, 0, bs);             int v = 0;                         // 將 buffer 內容取出,進行平方和運算             for (int i = 0; i < buffer.length; i++) {                 // 這裡沒有做運算的優化,為了更加清晰的展示代碼                 v += buffer[i] * buffer[i];             }             // 平方和除以數據總長度,得到音量大小。可以獲取白噪聲值,然後對實際采樣進行標准化。             // 如果想利用這個數值進行操作,建議用 sendMessage 將其拋出,在 Handler 裡進行處理。             Log.d("spl", String.valueOf(v / (float) r));         }         ar.stop();     }        public void pause() {                 // 在調用本線程的 Activity 的 onPause 裡調用,以便 Activity 暫停時釋放麥克風         isRun = false;     }        public void start() {                 // 在調用本線程的 Activity 的 onResume 裡調用,以便 Activity 恢復後繼續獲取麥克風輸入音量         if (!isRun) {             super.start();         }     } }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved