使用MediaRecorder錄制音頻


手機一般都提供了麥克風硬件,而Android系統就可以利用該硬件來錄制音頻了。

為了在Android應用中錄制音頻,Android提供了MediaRecorder類,使用MediaRecorder錄制音頻的過程如下:

1、創建MediaRecorder對象。

2、調用MediaRecorder對象的setAudioSource()方法設置聲音來源,一般傳入MediaRecorder.AudioSource.MIC參數指定錄制來自麥克風的聲音。

3、調用MediaRecorder對象的setOutputFormat()設置所錄制的音頻文件的格式。

4、調用MediaRecorder對象的setAudioEncoder()、setAudioEncodingBitRate(int  bitRate)、setAudioSamplingRate(int  samplingRate)設置所錄制的聲音的編碼格式、編碼位率、采樣率等,這些參數將可以控制所錄制的聲音的品質、文件的大小。一般來說,聲音品質越好,聲音文件越大。

5、調用MediaRecorder的setOutputFile(String  path)方法設置錄制的音頻文件的保存位置。

6、調用MediaRecorder的prepare()方法准備錄制。

7、調用MediaRecorder對象的start()方法開始錄制。

8

錄制完成,調用MediaRecorder對象的stop()方法停止錄制,並調用release()方法釋放資源。

注:步驟3、4兩個步驟千萬不能搞反,否則程序將會拋出IllegalStateException異常。

 

import java.io.File;
import java.io.IOException;

 

import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;

 

public class RecodeSound extends Activity implements OnClickListener{
  //程序中的按鈕
  ImageButton recode;
  ImageButton stop;
  //系統的音頻文件
  File soundFile;
  MediaRecorder mRecorder;

 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recode_sound);
    //獲取程序界面中的兩個按鈕
    recode = (ImageButton) findViewById(R.id.recode);
    stop = (ImageButton) findViewById(R.id.stop);
    //為兩個按鈕的單擊事件綁定監聽器
    recode.setOnClickListener(this);
    stop.setOnClickListener(this);
  }

  @Override
  protected void onDestroy() {
    if(soundFile != null && soundFile.exists()){
      //停止錄音
      mRecorder.stop();
      //釋放資源
      mRecorder.release();
      mRecorder = null;
    }
    super.onDestroy();
  }

 

  @Override
  public void onClick(View source) {
    switch(source.getId()){
      //單擊錄音按鈕
      case R.id.recode:
        if(!Environment.getExternalStorageState()
              .equals(android.os.Environment.MEDIA_MOUNTED)){
          Toast.makeText(RecodeSound.this, "SD卡不存在,請插入SD卡", 5000).show();
          return;
        }
        try {
          //創建保存錄音的音頻文件
          soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/sound.amr");
          mRecorder = new MediaRecorder();
          //設置錄音的聲音來源
          mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          //設置錄制的聲音的輸出格式(必須在設置聲音編碼格式之前設置)
          mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
          //設置聲音編碼的格式
          mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
          mRecorder.setOutputFile(soundFile.getAbsolutePath());
          mRecorder.prepare();
          //開始錄音
          mRecorder.start();
        } catch (IOException e) {
          e.printStackTrace();
        }
        break;
      //單擊停止按鈕
      case R.id.stop:
        if(soundFile != null && soundFile.exists()){
          //停止錄音
          mRecorder.stop();
          //釋放資源
          mRecorder.release();
          mRecorder = null;
        }
        break;
    }

  }

 

 }

錄制完成后將可以看到/mnt/sdcard/目錄下生成一個sound.amr文件,這就是剛剛錄制的音頻文件-----Android模擬器將會直接使用宿主電腦上的麥克風,一次如果讀者的電腦上有麥克風,那么該程序即可正常錄制聲音。

上面的程序需要使用系統的麥克風進行錄音,因此需要向該程序授予錄音的權限沒也就是在AndroidManifest.xml文件中增加如下配置:

<!-- 授予該程序錄制聲音的權限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM