Android App調(diào)用MediaRecorder實(shí)現(xiàn)錄音功能的實(shí)例
MediaRecorder
Android的MediaRecorder包含了Audio和video的記錄功能,在Android的界面上,Music和Video兩個(gè)應(yīng)用程序都是調(diào)用MediaRecorder實(shí)現(xiàn)的。
MediaRecorder在底層是基于OpenCore(PacketVideo)的庫(kù)實(shí)現(xiàn)的,為了構(gòu)建一個(gè)MediaRecorder程序,上層還包含了進(jìn)程間通訊等內(nèi)容,這種進(jìn)程間通訊的基礎(chǔ)是Android基本庫(kù)中的Binder機(jī)制。
以開源的Android為例MediaRecorder的代碼主要在以下的目錄中:
JAVA程序的路徑:
packages/apps/Camera/src/com/android/camera/VideoCamera.java
JAVA Framework的路徑:
frameworks/base/media/java/android/media/MediaRecorder.java
JAVA本地調(diào)用部分(JNI):
frameworks/base/media/jni/android_media_MediaRecorder.cpp
這部分內(nèi)容編譯成為目標(biāo)是libmedia_jni.so。
主要的頭文件在以下的目錄中:
frameworks/base/include/media/
多媒體底層庫(kù)在以下的目錄中:
frameworks/base/media/libmedia/
這部分的內(nèi)容被編譯成庫(kù)libmedia.so。
多媒體服務(wù)部分:
frameworks/base/media/libmediaplayerservice/
MediaRecorder和MeidaPlayer使用相同的服務(wù)。
基于OpenCore部分
external/opencore/android/author
這部分內(nèi)容被編譯成庫(kù)libopencoreauthor.so。
基本的錄音功能實(shí)現(xiàn):
好了,了解了大概的路徑,具體的調(diào)用MediaRecorder的內(nèi)容便可以深入各文件中去研究,接下來(lái)我們便直接來(lái)看例子,這個(gè)錄音器的代碼實(shí)現(xiàn)的說(shuō)明都寫在了注釋中,非常簡(jiǎn)單:
import java.io.IOException;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
/**
* @description 對(duì)通過(guò)android系統(tǒng)手機(jī)進(jìn)行錄音的一點(diǎn)說(shuō)明測(cè)試
* @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設(shè)置聲音來(lái)源。
* MediaRecorder.AudioSource這個(gè)內(nèi)部類詳細(xì)的介紹了聲音來(lái)源。
* 該類中有許多音頻來(lái)源,不過(guò)最主要使用的還是手機(jī)上的麥克風(fēng),MediaRecorder.AudioSource.MIC
*/
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
/**
* mediaRecorder.setOutputFormat代表輸出文件的格式。該語(yǔ)句必須在setAudioSource之后,在prepare之前。
* OutputFormat內(nèi)部類,定義了音頻輸出的格式,主要包含MPEG_4、THREE_GPP、RAW_AMR……等。
*/
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
/**
* mediaRecorder.setAddioEncoder()方法可以設(shè)置音頻的編碼
* AudioEncoder內(nèi)部類詳細(xì)定義了兩種編碼:AudioEncoder.DEFAULT、AudioEncoder.AMR_NB
*/
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
/**
* 設(shè)置錄音之后,保存音頻文件的位置
*/
mediaRecorder.setOutputFile("file:///sdcard/myvido/a.3pg");
/**
* 調(diào)用start開始錄音之前,一定要調(diào)用prepare方法。
*/
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/***
* 此外,還有和MediaRecorder有關(guān)的幾個(gè)參數(shù)與方法,我們一起來(lái)看一下:
* sampleRateInHz :音頻的采樣頻率,每秒鐘能夠采樣的次數(shù),采樣率越高,音質(zhì)越高。
* 給出的實(shí)例是44100、22050、11025但不限于這幾個(gè)參數(shù)。例如要采集低質(zhì)量的音頻就可以使用4000、8000等低采樣率
*
* channelConfig :聲道設(shè)置:android支持雙聲道立體聲和單聲道。MONO單聲道,STEREO立體聲
*
* recorder.stop();停止錄音
* recorder.reset(); 重置錄音 ,會(huì)重置到setAudioSource這一步
* recorder.release(); 解除對(duì)錄音資源的占用
*/
}
這里,一定要注意一點(diǎn),那就是如果我們想要錄音的話,那么首先得添加錄音權(quán)限到AndroidManiferst.xml中:
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
- android MediaRecorder實(shí)現(xiàn)錄屏?xí)r帶錄音功能
- Android編程錄音工具類RecorderUtil定義與用法示例
- Android實(shí)現(xiàn)錄音功能實(shí)現(xiàn)實(shí)例(MediaRecorder)
- Android使用AudioRecord實(shí)現(xiàn)暫停錄音功能實(shí)例代碼
- Android錄音--AudioRecord、MediaRecorder的使用
- android 通過(guò)MediaRecorder實(shí)現(xiàn)簡(jiǎn)單的錄音示例
- Android使用MediaRecorder實(shí)現(xiàn)錄音及播放
- Android音頻錄制MediaRecorder之簡(jiǎn)易的錄音軟件實(shí)現(xiàn)代碼
- Android簡(jiǎn)單的利用MediaRecorder進(jìn)行錄音的實(shí)例代碼
- Android使用AudioRecord實(shí)現(xiàn)錄音功能
相關(guān)文章
Android工程:引用另一個(gè)Android工程的方法詳解
本篇文章是對(duì)在Android中引用另一個(gè)Android工程的方法進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05
Android獲取超級(jí)管理員權(quán)限的實(shí)現(xiàn)
這篇文章主要介紹了Android獲取超級(jí)管理員權(quán)限的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android Camera2采集攝像頭原始數(shù)據(jù)
這篇文章主要介紹了Android Camera2采集攝像頭原始數(shù)據(jù)并進(jìn)行手工預(yù)覽的功能實(shí)現(xiàn)原理以及代碼分析,需要的朋友學(xué)習(xí)下吧。2018-02-02
mac開發(fā)android環(huán)境搭建步驟圖解
這里比較詳細(xì)的來(lái)總結(jié)下mac開發(fā)android的環(huán)境搭建步驟安裝過(guò)程,希望對(duì)一些正準(zhǔn)備配置Android開發(fā)環(huán)境的小伙伴們有一定幫助2014-01-01
Android Studio將AAR包發(fā)布到Maven本地倉(cāng)庫(kù)的流程步驟
Android AAR文件是Android Archive文件的縮寫,是一種Android應(yīng)用程序存檔文件格式,類似于JAR文件格式,它在Android Studio中被廣泛使用,本文給大家介紹了Android Studio將AAR包發(fā)布到Maven本地倉(cāng)庫(kù)的流程步驟,需要的朋友可以參考下2025-03-03
Android應(yīng)用內(nèi)調(diào)用第三方應(yīng)用的方法
這篇文章主要介紹了Android應(yīng)用內(nèi)調(diào)用第三方應(yīng)用的方法,有需要的朋友可以參考一下2014-01-01
Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例
這篇文章主要介紹了Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android10自動(dòng)連接WiFi問(wèn)題的解決
這篇文章主要介紹了Android10自動(dòng)連接WiFi問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

