編輯:關於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;
}
}
}程序運行效果圖:

android開源系列:CircleImageView自定義圓形控件的使用
主要的類: package de.hdodenhof.circleimageview; import edu.njupt.zhb.main.
Android Button Maker(在線生成android shape xml文件的工具),真方便!
使用起來超簡單,如圖: Android Button Maker is online tool to generate button
Android學習Scroller(五)——詳解Scroller調用過程以及View的重繪
MainActivity如下: package cc.ww; import android.os.Bundle; import android.widget.Image
android:descendantFocusability用法簡析
開發中很常見的一個問題,項目中的listview不僅僅是簡單的文字,常常需要自己定義listview,自己的Adapter去繼承BaseAdapter,在adapter