Android App調用MediaRecorder實現錄音功能的執行個體【轉】

來源:互聯網
上載者:User

標籤:lan   rda   instance   encode   路徑   tee   檔案中   car   stack   

本文轉載自:http://www.jb51.net/article/82281.htm

這篇文章主要介紹了Android App調用MediaRecorder實現錄音功能的執行個體,MediaRecorder非常強大,不僅能夠用來錄製音頻還可以錄製視頻,需要的朋友可以參考下 

MediaRecorder

Android的MediaRecorder包含了Audio和video的記錄功能,在Android的介面上,Music和Video兩個應用程式都是調用MediaRecorder實現的。
MediaRecorder在底層是基於OpenCore(PacketVideo)的庫實現的,為了構建一個MediaRecorder程式,上層還包含了進程間通訊等內容,這種進程間通訊的基礎是Android基本庫中的Binder機制。
以開源的Android為例MediaRecorder的代碼主要在以下的目錄中:
JAVA程式的路徑:

packages/apps/Camera/src/com/android/camera/VideoCamera.java

JAVA Framework的路徑:

frameworks/base/media/java/android/media/MediaRecorder.java

JAVA本地調用部分(JNI):

frameworks/base/media/jni/android_media_MediaRecorder.cpp

這部分內容編譯成為目標是libmedia_jni.so。
主要的標頭檔在以下的目錄中:

frameworks/base/include/media/

多媒體底層庫在以下的目錄中:

frameworks/base/media/libmedia/ 

這部分的內容被編譯成庫libmedia.so。
多媒體服務部分:

frameworks/base/media/libmediaplayerservice/

MediaRecorder和MeidaPlayer使用相同的服務。
基於OpenCore部分 

external/opencore/android/author

這部分內容被編譯成庫libopencoreauthor.so。

基本的錄音功能實現:
好了,瞭解了大概的路徑,具體的調用MediaRecorder的內容便可以深入各檔案中去研究,接下來我們便直接來看例子,這個錄音器的代碼實現的說明都寫在了注釋中,非常簡單:
  

import java.io.IOException;  import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; /**  * @description 對通過android系統手機進行錄音的一點說明測試  * @author chenzheng_java  * @since 2011/03/23  */ public class MediaRecordActivity extends Activity {    MediaRecorder mediaRecorder ;  @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);      mediaRecorder = new MediaRecorder();   record();     }    /**   * 開始錄製   */  private void record(){   /**    * mediaRecorder.setAudioSource設定聲音來源。    * MediaRecorder.AudioSource這個內部類詳細的介紹了聲音來源。    * 該類中有許多音頻來源,不過最主要使用的還是手機上的麥克風,MediaRecorder.AudioSource.MIC    */   mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);   /**    * mediaRecorder.setOutputFormat代表輸出檔案的格式。該語句必須在setAudioSource之後,在prepare之前。    * OutputFormat內部類,定義了音訊輸出的格式,主要包含MPEG_4、THREE_GPP、RAW_AMR……等。    */   mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);   /**    * mediaRecorder.setAddioEncoder()方法可以設定音訊編碼    * AudioEncoder內部類詳細定義了兩種編碼:AudioEncoder.DEFAULT、AudioEncoder.AMR_NB    */   mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);   /**    * 設定錄音之後,儲存音頻檔案的位置    */   mediaRecorder.setOutputFile("file:///sdcard/myvido/a.3pg");      /**    * 調用start開始錄音之前,一定要調用prepare方法。    */   try {    mediaRecorder.prepare();    mediaRecorder.start();   } catch (IllegalStateException e) {    e.printStackTrace();   } catch (IOException e) {    e.printStackTrace();   }     }    /***   * 此外,還有和MediaRecorder有關的幾個參數與方法,我們一起來看一下:   * sampleRateInHz :音訊採樣頻率,每秒鐘能夠採樣的次數,採樣率越高,音質越高。   * 給出的執行個體是44100、22050、11025但不限於這幾個參數。例如要採集低品質的音頻就可以使用4000、8000等低採樣率   *   * channelConfig :聲道設定:android支援雙聲道立體聲和單聲道。MONO單聲道,STEREO立體聲   *   * recorder.stop();停止錄音   * recorder.reset(); 重設錄音 ,會重設到setAudioSource這一步   * recorder.release(); 解除對錄音資源的佔用   */ } 

 

這裡,一定要注意一點,那就是如果我們想要錄音的話,那麼首先得添加錄音許可權到AndroidManiferst.xml中:

<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>

Android App調用MediaRecorder實現錄音功能的執行個體【轉】

相關文章

聯繫我們

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