Android 音訊錄製,Android音頻錄製
MediaRecorder類詳解
手機一般都有麥克風和網路攝影機,而Android系統就可以利用這些硬體來錄製音視頻了。
為了增加對錄製音視頻的支援,Android系統提供了一個MediaRecorder的類。該類的使用也非常簡單,下面讓我們來瞭解一下這個類
一、結構java.lang.Object->android.media.MediaRecorder
二、類概述:用於錄製音頻和視頻的一個類。
三、狀態圖:
說明:
與MediaPlayer類非常相似MediaRecorder也有它自己的狀態圖。下面是關於MediaRecorder的各個狀態的介紹:
1、Initial:初始狀態,當使用new()方法建立一個MediaRecorder對象或者調用了reset()方法時,該MediaRecorder對象處於Initial狀態。在設定視頻源或者音頻源之後將轉換為Initialized狀態。另外,在除Released狀態外的其它狀態通過調用reset()方法都可以使MediaRecorder進入該狀態。
2、Initialized:已初始化狀態,可以通過在Initial狀態調用setAudioSource()或setVideoSource()方法進入該狀態。在這個狀態可以通過setOutputFormat()方法設定輸出格式,此時MediaRecorder轉換為DataSourceConfigured狀態。另外,通過reset()方法進入Initial狀態。
3、DataSourceConfigured:資料來源配置狀態,這期間可以設定編碼方式、輸出檔案、旋轉螢幕、預覽顯示等等。可以在Initialized狀態通過setOutputFormat()方法進入該狀態。另外,可以通過reset()方法回到Initial狀態,或者通過prepare()方法到達Prepared狀態。
4、Prepared:就緒狀態,在DataSourceConfigured狀態通過prepare()方法進入該狀態。在這個狀態可以通過start()進入錄製狀態。另外,可以通過reset()方法回到Initialized狀態。
5、Recording:錄製狀態,可以在Prepared狀態通過調用start()方法進入該狀態。另外,它可以通過stop()方法或reset()方法回到Initial狀態。
6、Released:釋放狀態(官方文檔給出的詞叫做Idle state 空閑狀態),可以通過在Initial狀態調用release()方法來進入這個狀態,這時將會釋放所有和MediaRecorder對象綁定的資源。
7、Error:錯誤狀態,當錯誤發生的時候進入這個狀態,它可以通過reset()方法進入Initial狀態。
提示:與MediaPlayer相似使用MediaRecorder錄音錄影時需要嚴格遵守狀態圖說明中的函數調用先後順序,在不同的狀態調用不同的函數,否則會出現異常。
下面一個執行個體代碼描述了的建立過程:
/** * 開始錄音 */private void startRecording() {BaseUtils.printd(TAG, "startRecording");mParams.mFileName = mParams.mFileDir + System.currentTimeMillis() + "amr";mRecorder = new MediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);mRecorder.setOutputFile(mParams.mFileName);mRecorder.setOnInfoListener(mRecorderOnInfoListener);if(mParams.mMaxFileSize > 0){mRecorder.setMaxFileSize(mParams.mMaxFileSize);}if(mParams.mMaxDurationSize > 0){mRecorder.setMaxDuration(mParams.mMaxDurationSize);}try {mRecorder.prepare();mRecorder.start();mObtainDecibelThread = new ObtainDecibelThread();mObtainDecibelThread.start();} catch (Exception e) {BaseUtils.printe("Exception", "Exception:" + e);}}