您好,登錄后才能下訂單哦!
這篇文章主要介紹“Android 怎么用Lame編碼器編碼mp3文件”,在日常操作中,相信很多人在Android 怎么用Lame編碼器編碼mp3文件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android 怎么用Lame編碼器編碼mp3文件”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
這篇文章會基于下面3個問題來展開講解。
1、什么是Lame?
2、為什么采用Lame?
3、Lame在Android應(yīng)用上如何使用?
我們看下Lame官網(wǎng)給的描述
LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL.
翻譯成中文就是:LAME是一個高質(zhì)量的MPEG音頻層III (MP3)編碼器,在LGPL下授權(quán)。
好了,現(xiàn)在我們知道Lame就是個開源的編碼器,而且是專門用來編碼mp3文件的。
在Android上開發(fā)過錄音功能的同學(xué)應(yīng)該知道,在Android上要實現(xiàn)錄音功能,有2種方式。一種是采用AudioRecord的方式,AudioRecord錄制的直接是原始的pcm數(shù)據(jù),另一種方式就是采用MediaRecord,可以錄制類似amr、aac格式的文件。
這里貼下MediaRecord目前支持的錄音格式,可以看到目前是不支持mp3的。那這時我們想要編碼mp3的文件,就得借助lame來實現(xiàn)了。
public final class AudioEncoder { /* Do not change these values without updating their counterparts * in include/media/mediarecorder.h! */ private AudioEncoder() {} public static final int DEFAULT = 0; /** AMR (Narrowband) audio codec */ public static final int AMR_NB = 1; /** AMR (Wideband) audio codec */ public static final int AMR_WB = 2; /** AAC Low Complexity (AAC-LC) audio codec */ public static final int AAC = 3; /** High Efficiency AAC (HE-AAC) audio codec */ public static final int HE_AAC = 4; /** Enhanced Low Delay AAC (AAC-ELD) audio codec */ public static final int AAC_ELD = 5; /** Ogg Vorbis audio codec */ public static final int VORBIS = 6; /** @hide EVRC audio codec */ public static final int EVRC = 10; /** @hide QCELP audio codec */ public static final int QCELP = 11; /** @hide Linear PCM audio codec */ public static final int LPCM = 12; }
在android上集成開源的代碼,很多時候套路都差不多,就是下載源碼,編譯出相關(guān)的so庫,然后就是調(diào)用這些庫提供的方法了,當然,調(diào)用so庫里面的方法,應(yīng)用上需要借助jni來實現(xiàn)。
這里就不介紹如何下載lame源碼和編碼so庫了。編譯lame源碼后,我們會得到一個libmp3lame.so 的庫文件,調(diào)用這個so庫里面的方法,還需要我們?nèi)崿F(xiàn)JNI部分的代碼。
整體的思路就是,應(yīng)用層通過調(diào)用JNI提供的native方法,然后調(diào)用到 libmp3lame.so 庫里面的方法,實現(xiàn)編碼mp3文件。
這里給出的一個例子是將pcm格式的文件編碼mp3格式的文件。
代碼git地址:github.com/yorkZJC/And… 代碼邏輯這里簡單講下:
LameEncodeJniNative.java 是本地封裝的native方法,為應(yīng)用層提供了2個方法,一個是編碼,一個是結(jié)束。這2個方法對應(yīng)c++層具體的實現(xiàn),可以看工程 cpp/目錄下文件的實現(xiàn),cpp文件里面的實現(xiàn)也比較簡單。
應(yīng)用代碼調(diào)用的時候,就是傳入對應(yīng)的pcm源文件和需要生成的mp3文件路徑,還有pcm源文件的格式信息(采用率、通道數(shù)、編碼數(shù)據(jù)位數(shù))。
File pcmFile = new File(getExternalFilesDir(null), "input.pcm"); File mp3File = new File(getExternalFilesDir(null), "output.mp3"); mLameEncoder = new LameEncodeJniNative(); mLameEncoder.encode(pcmFile.getAbsolutePath(), mp3File.getAbsolutePath(), 44100, 2, 128);
到此,關(guān)于“Android 怎么用Lame編碼器編碼mp3文件”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。