AudioRecorder實時錄製mp3格式音頻

        在講述正文以前首先介紹有關音頻的一些知識。
1、riff/wav/pcm/raw/aac/mp3
        riff其實就是一種文件描述的格式;pcm就是媒體文件數據的元數據,直接記錄聲音的內容;wav文件就採用了riff的描述,前面44字節就是riff描述內容,wav=riff+pcm;raw=pcm;mp3是一種音頻的壓縮編碼,就是將pcm通過算法進行壓縮;aac也是一種高級音頻編碼,相對於mp3,aac格式的音頻更佳,文件更小,不足之處在於它屬於有損壓縮的格式。
2、MediaRecorder/audioRecord區別
        MediaRecorder是系統提供常用的錄音類,該類可以實現音頻錄製生成文件;audioRecord也是系統提供的錄音類,但是它可以直接捕獲音頻流,開發者可以實時隨意處理其內容,常見場景比如語音聊天/tom貓/k歌。

        介紹完基礎知識,下面進入正文,如何實時錄製mp3音頻,現如今轉化音頻爲MP3的框架使用的最多的是lame框架(利用C語言是實現的),在Android和IOS中均可使用。
        我們使用的是lame框架進行mp3的格式轉換,由於它是C語言編寫的,無法在Android中直接使用,我們必須使用Jni的方法來調用lame,在這裏就不介紹Jni的使用方法了,使用Jni的方法我們主要是爲了得到一個So文件,得到So文件以後,我們load至系統中就可以調用對應的方法,這裏我使用的一個現成的so文件來進行lame框架中格式轉化的方法,下面進入詳細的代碼。

一、引入So文件

        使用So文件必須將So文件引入至系統中,在這裏簡要介紹一下如何在Android Stuio中引入so文件,有兩種方式:
(1)按照As中默認路徑存放,將so文件存放至main文件夾(與java文件文件夾同級)下,與原先eclipse一樣即可
(2)配置so文件的存放路徑,將配置寫在app的android節點之下,具體代碼如下:

android{
    ...
    /*將so文件放置libs文件夾時,需要配置,防止main/jniLibs時一定不能配置 */
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

引入so文件的項目圖:
如下圖,引入so文件

二、工具類源碼代碼結構

        引入了so文件以後,接下來就是實際上的錄音工具類的編寫了,首先貼上錄音工具類的代碼結構圖。

三、源碼解析

待續…

四、總結

        本項目主要使用的jni的方法調用libmp3的框架來進行實時的錄音錄製,使用的技術主要有jni、AudioRecord等的技術,demo源碼可在Android 實時錄製音頻爲MP3格式demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章