編輯:關於Android編程
為了在 Android 應用中錄制聲音,Android提供了 MediaRecorder 類,關於MediaRecorder的詳解大家可以參考《Android開發之MediaRecorder類詳解》。
使用MediaRecorder錄制聲音的步驟:
1) 創建 MediaRecorder 對象。
2) 調用MediaRecorder對象的setAudioSource()方法設置聲音來源,一般傳入 MediaRecorder. AudioSource.MIC參數指定錄制來自麥克風的聲音。
3) 調用MediaRecorder對象的setOutputFormat()設置所錄制的音頻文件的格式。
4) 調用MediaRecorder 對象的setAudioEncoder()、setAudioEncodingBitRate(intbitRate)、 setAudioSamplingRate(int samplingRate)設置所錄制的聲音的編碼格式、編碼位率、采樣率等, 這些參數將可以控制所錄制的聲音的品質、文件的大小。一般來說,聲音品質越好,聲音文件越大。
5) 調用MediaRecorder的setOutputFile(Stringpath)方法設置錄制的音頻文件的保存位置。
6) 調用MediaRecorder的prepare()方法准備錄制。
7) 調用MediaRecorder對象的start()方法開始錄制。
8) 錄制完成,調用MediaRecorder對象的stop()方法停止錄制,並調用release()方法釋放資源。
提示:1.上面的步驟中第3和第4兩個步驟千萬不能搞反,否則程序將會拋出lllegalStateException 異常。
2. 設置聲音編碼格式要和聲音的輸出格式相對應,不然錄制的音頻文件不標准。如果編碼格式和輸出格式不對應,錄制出的音頻文件雖然可以播放,但是將多個這類音頻文件合並之後,會出現只播放合並文件中的部分文件。
應用實例
使用MediaRecorder錄制聲音:
實例代碼:
package com.jph.recordsound; import java.io.File; import org.crazyit.sound.R; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.Toast; public class RecordSound extends Activity implements OnClickListener { // 定義界面上的兩個按鈕 ImageButton record, stop; // 系統的音頻文件 File soundFile; MediaRecorder mRecorder; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 獲取程序界面中的兩個按鈕 record = (ImageButton) findViewById(R.id.record); stop = (ImageButton) findViewById(R.id.stop); // 為兩個按鈕的單擊事件綁定監聽器 record.setOnClickListener(this); stop.setOnClickListener(this); } @Override public 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.record: if (!Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { Toast.makeText(RecordSound.this, "SD卡不存在,請插入SD卡!", Toast.LENGTH_SHORT).show(); return; } try { // 創建保存錄音的音頻文件 soundFile = new File(Environment .getExternalStorageDirectory().getCanonicalFile() + "/sound.amr"); mRecorder = new MediaRecorder(); // 設置錄音的聲音來源 mRecorder.setAudioSource(MediaRecorder .AudioSource.MIC); // 設置錄制的聲音的輸出格式(必須在設置聲音編碼格式之前設置) mRecorder.setOutputFormat(MediaRecorder .OutputFormat.AMR_NB); // 設置聲音編碼的格式 mRecorder.setAudioEncoder(MediaRecorder .AudioEncoder.AMR_NB); mRecorder.setOutputFile(soundFile.getAbsolutePath()); mRecorder.prepare(); // 開始錄音 mRecorder.start(); //① } catch (Exception e) { e.printStackTrace(); } break; // 單擊停止按鈕 case R.id.stop: if (soundFile != null && soundFile.exists()) { // 停止錄音 mRecorder.stop(); //② // 釋放資源 mRecorder.release(); //③ mRecorder = null; } break; } } }
程序運行效果圖:
主要的類: package de.hdodenhof.circleimageview; import edu.njupt.zhb.main.
使用起來超簡單,如圖: Android Button Maker is online tool to generate button
MainActivity如下: package cc.ww; import android.os.Bundle; import android.widget.Image
開發中很常見的一個問題,項目中的listview不僅僅是簡單的文字,常常需要自己定義listview,自己的Adapter去繼承BaseAdapter,在adapter