Android 音訊錄製,Android音頻錄製

來源:互聯網
上載者:User

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);}}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.