Android 錄音實現(xiàn)(MediaRecorder)

最近在項目中實現(xiàn)錄音功能式撼,并在邏輯中還有對錄音文件的特殊要求踢匣,前前后后看了很多資料告匠,學(xué)習了很多,今天在這里分享記錄一下离唬,以便后期回看后专。

Android提供了兩個API用于錄音的實現(xiàn):MediaRecorder 和AudioRecord。

  1. MediaRecorder:錄制的音頻文件是經(jīng)過壓縮后的男娄,需要設(shè)置編碼器行贪。并且錄制的音頻文件可以用系統(tǒng)自帶的Music播放器播放。MediaRecorder已經(jīng)集成了錄音模闲、編碼建瘫、壓縮等,并支持少量的錄音音頻格式尸折,但是這也是他的缺點啰脚,支持的格式過少并且無法實時處理音頻數(shù)據(jù)。

  2. AudioRecord:主要實現(xiàn)對音頻實時處理以及邊錄邊播功能实夹,相對MediaRecorder比較專業(yè)橄浓,輸出是PCM語音數(shù)據(jù),如果保存成音頻文件亮航,是不能夠被播放器播放的荸实,所以必須先寫代碼實現(xiàn)數(shù)據(jù)編碼以及壓縮。

MediaRecorder

MediaRecorder因為已經(jīng)集成了錄音缴淋、編碼准给、壓縮等功能,所以使用起來相對比較簡單重抖。

開始錄音

MediaRecorder 使用起來相對簡單露氮,音頻編碼可以根據(jù)自己實際需要自己設(shè)定,文件名防止重復(fù)钟沛,使用了日期_時分秒的結(jié)構(gòu)畔规,audioSaveDir 是文件存儲目錄,可自行設(shè)定恨统。下面貼出示例代碼:

public void startRecord() {
    // 開始錄音
    /* ①Initial:實例化MediaRecorder對象 */
    if (mMediaRecorder == null)
        mMediaRecorder = new MediaRecorder();
    try {
        /* ②setAudioSource/setVedioSource */
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設(shè)置麥克風
        /*
         * ②設(shè)置輸出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式
         * 叁扫,H263視頻/ARM音頻編碼)、MPEG-4延欠、RAW_AMR(只支持音頻且音頻編碼要求為AMR_NB)
         */
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        /* ②設(shè)置音頻文件的編碼:AAC/AMR_NB/AMR_MB/Default 聲音的(波形)的采樣 */
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";
        if (!FileUtils.isFolderExist(FileUtils.getFolderName(audioSaveDir))) {
            FileUtils.makeFolders(audioSaveDir);
        }
        filePath = audioSaveDir + fileName;
        /* ③準備 */
        mMediaRecorder.setOutputFile(filePath);
        mMediaRecorder.prepare();
        /* ④開始 */
        mMediaRecorder.start();
    } catch (IllegalStateException e) {
        LogUtil.i("call startAmr(File mRecAudioFile) failed!" + e.getMessage());
    } catch (IOException e) {
        LogUtil.i("call startAmr(File mRecAudioFile) failed!" + e.getMessage());
    }
}

上面代碼只是基本使用方式陌兑,具體使用還需結(jié)合項目具體需求制定具體邏輯,但是MediaRecorder使用時需實例化由捎,所以在不用時一定要記得即時釋放兔综,以免造成內(nèi)存泄漏。

結(jié)束錄音

public void stopRecord() {
    try {
        mMediaRecorder.stop();
        mMediaRecorder.release();
        mMediaRecorder = null;
        filePath = "";
    } catch (RuntimeException e) {
        LogUtil.e(e.toString());
        mMediaRecorder.reset();
        mMediaRecorder.release();
        mMediaRecorder = null;

        File file = new File(filePath);
        if (file.exists())
            file.delete();

        filePath = "";
    }
}

總結(jié):MediaRecorder 實現(xiàn)錄音還是比較簡單的,代碼量相對較少软驰,較為簡明涧窒,但也有不足之處,例如輸出文件格式選擇較少锭亏,錄音過程不能暫停等纠吴。

下一篇文章介紹了使用 AudioRecorder 實現(xiàn)錄音功能 Android錄音實現(xiàn)(AudioRecorder)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慧瘤,隨后出現(xiàn)的幾起案子戴已,更是在濱河造成了極大的恐慌,老刑警劉巖锅减,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糖儡,死亡現(xiàn)場離奇詭異,居然都是意外死亡怔匣,警方通過查閱死者的電腦和手機握联,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來每瞒,“玉大人金闽,你說我怎么就攤上這事〗斯牵” “怎么了代芜?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浓利。 經(jīng)常有香客問我蜒犯,道長,這世上最難降的妖魔是什么荞膘? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮玉工,結(jié)果婚禮上羽资,老公的妹妹穿的比我還像新娘。我一直安慰自己遵班,他們只是感情好屠升,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狭郑,像睡著了一般腹暖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翰萨,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天脏答,我揣著相機與錄音,去河邊找鬼。 笑死殖告,一個胖子當著我的面吹牛阿蝶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黄绩,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羡洁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爽丹?” 一聲冷哼從身側(cè)響起筑煮,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粤蝎,沒想到半個月后真仲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡诽里,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年袒餐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谤狡。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灸眼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墓懂,到底是詐尸還是另有隱情焰宣,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布捕仔,位于F島的核電站匕积,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏榜跌。R本人自食惡果不足惜闪唆,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钓葫。 院中可真熱鬧悄蕾,春花似錦、人聲如沸础浮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豆同。三九已至番刊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間影锈,已是汗流浹背芹务。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工蝉绷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锄禽。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓潜必,卻偏偏與公主長得像,于是被迫代替她去往敵國和親沃但。 傳聞我的和親對象是個殘疾皇子磁滚,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容