android中SoundRecorder

來源:互聯網
上載者:User

一.Recorder類介紹

Recorder類負責SoundRecorder的全部功能方面的實現,它包含一個MediaRecorder成員和一個MediaPlayer成員,並封裝了這兩個成員的相關操作。該類向SoundRecorder類提供一系列的介面來控制錄音和播放錄音的過程。下面介紹一下其中重要的成員和方法。

成員:

   五種狀態:

   public static final int IDLE_STATE = 0;//停止

   public static final int RECORDING_STATE = 1;//錄音

   public static final int PLAYING_STATE = 2; //播放錄音

   public static final int IDLE_HOLD_STATE = 3; //停止但持有一個錄音檔案

   public static final int PLAYING_PAUSE_STATE = 4;//播放暫停

 

儲存路徑:

private static final String SDCARD_PATH =

Environment.getExternalStorageDirectory().getAbsolutePath()

+ MediaStore.RECORDER_PATH_SDCARD;

private static final String LOCAL_PATH =

Environment.getDataDirectory().getAbsolutePath()

+ MediaStore.RECORDER_PATH_PHONE;

 

      錄音器和播放器:

MediaRecorder mRecorder = null;

MediaPlayer mPlayer = null;

 

方法:

對狀態的操作方法:

state(); setState();\\讀取狀態和設定狀態

 

saveState(); restoreState();\\負責儲存和讀取儲存路徑

sampleLength(); sampleFile();getSampleFileUri(); 返回相應的成員

setSampleFileUri(); \\設定檔案路徑

setSaveInSDCard();\\儲存到SD卡

setSaveInLocal();\\儲存到手機

delete();\\刪除錄音檔案,更新狀態。

clear();\\錄音檔案儲存,可以進行下一次錄音。

getCurrentStorage()\\擷取當前檔案路徑

setSample()\\設定持有的錄音檔案的儲存路徑和長度

 

主要功能函數:

startRecording():啟動錄音,包括:

1.設定錄音檔案路徑

2.構造錄音檔案名稱

3.構造並初始化錄音檔案

4.構造並設定mRecorder,包括設定聲源、輸出檔案格式、輸出檔案路徑、編碼方式等。

5.啟動mRecorder開始錄音, 將Recorder的狀態設定為RECORDING_STATE。

 

stopRecording():停止錄音,包括:

1.     停止mRecorder,釋放資源。

2.     將Recorder狀態設為IDLE_HOLD_STATE。

 

startPlayback():開始播放持有的錄音檔案。狀態設為PLAYING_STATE。

stopPlayback():停止播放。狀態設為IDLE_HOLD_STATE。

stop():停止mRecorder和mPlayer。狀態設為IDLE_HOLD_STATE。

pausePlay():暫停播放,儲存暫停位置。狀態設為PLAYING_PAUSE_STATE。

continuePlay():繼續播放。狀態設為PLAYING_STATE。

 

總體上來說,Recorder類總是處於這五個狀態,通過調用各個方法使得Recorder在各個狀態之間跳轉,如(虛線框部分在SoundRecorder類中實現):

對於Recorder類來說,實際上的錄音實現都是通過調用mRecorder的方法來實現的,例如在startRecording()中,有如下代碼:

        mRecorder = new MediaRecorder();

        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

        mRecorder.setOutputFormat(outputfileformat);

        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

        mRecorder.setOutputFile(mSampleFile.getAbsolutePath());

mRecorder.prepare();

        mRecorder.start();

      Recorder本身只是將MediaRecorder類封裝,提供介面給SoundRecorder類。SoundRecorder類負責實現所有對使用者呈現的部分,其本身就是一個Activity。兩者的關係如所示

 

二.SoundRecorder類介紹

先介紹RemainingTimeCalculator類。它負責計算儲存介質剩餘空間能夠存放多長的錄音檔案。其中的timeRemaining()函數負責計算剩餘時間,取檔案大小限制和空間大小限制的較小的一個來計算剩餘時間。

mCurrentLowerLimit = result < result2

            ? DISK_SPACE_LIMIT : FILE_SIZE_LIMIT;

 

SoundRecorder類本身是一個Activity。該類負責實現一切向使用者顯示的部分:包括介面,對各種操作的響應。錄音、儲存錄音、播放錄音等功能通過調用Recorder類中的方法實現。在SoundRecorder中包含一個Recorder類的對象mRecorder。

作為Activity類的子類,SoundRecorder重載了父類的多個函數:

onCreate() onDestroy()(從啟動到完全銷毀)

onStart() onStop()(從可視到不可視)

onPause() (從可操作到不可操作)

這幾個函數包含Activity在不同狀態間切換時需要的操作。這裡指的狀態切換是因為SoundRecorder程式之外的影響,如手機休眠、程式掛起、從SoundRecorder程式切換到其他程式等。

 

此外SoundRecorder還重載了幾個函數:

onConfigurationChanged();橫豎屏切換時,重新整理UI介面。

onSaveInstanceState(Bundle outState);將Recorder的狀態儲存到Bundle,實際調用的是上面提到的saveState()函數。當SoundRecorder因為某些原因需要中斷時,狀態被儲存,然後在重啟時由onCreate()中的相應代碼讀取Bundle中的狀態值,回複中斷前程式的狀態,實際調用的是上面提到的restoreState()函數。

onPrepareOptionsMenu()、onOptionsItemSelected(),這兩個函數負責實現menu鍵功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.