欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 如何采用Lame編碼器編碼mp3文件

 更新時間:2021年03月15日 09:03:23   作者:小馳筆記  
這篇文章主要介紹了Android 如何采用Lame編碼器編碼mp3文件,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下

這篇文章會基于下面3個問題來展開講解。

         1、什么是Lame?

         2、為什么采用Lame?

         3、Lame在Android應(yīng)用上如何使用?

一、什么是Lame

 我們看下Lame官網(wǎng)(lame.sourceforge.io/index.php)給的描述

   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文件的。

二、為什么要采用Lame

 在Android上開發(fā)過錄音功能的同學(xué)應(yīng)該知道,在Android上要實(shí)現(xiàn)錄音功能,有2種方式。一種是采用AudioRecord的方式,AudioRecord錄制的直接是原始的pcm數(shù)據(jù),另一種方式就是采用MediaRecord,可以錄制類似amr、aac格式的文件。

 這里貼下MediaRecord目前支持的錄音格式,可以看到目前是不支持mp3的。那這時我們想要編碼mp3的文件,就得借助lame來實(shí)現(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;
  }

三、Lame在Android應(yīng)用上如何使用

 在android上集成開源的代碼,很多時候套路都差不多,就是下載源碼,編譯出相關(guān)的so庫,然后就是調(diào)用這些庫提供的方法了,當(dāng)然,調(diào)用so庫里面的方法,應(yīng)用上需要借助jni來實(shí)現(xiàn)。

 這里就不介紹如何下載lame源碼和編碼so庫了。編譯lame源碼后,我們會得到一個libmp3lame.so 的庫文件,調(diào)用這個so庫里面的方法,還需要我們?nèi)?shí)現(xiàn)JNI部分的代碼。

 整體的思路就是,應(yīng)用層通過調(diào)用JNI提供的native方法,然后調(diào)用到 libmp3lame.so 庫里面的方法,實(shí)現(xiàn)編碼mp3文件。

 這里給出的一個例子是將pcm格式的文件編碼mp3格式的文件。

 代碼git地址:github.com/yorkZJC/And…  代碼邏輯這里簡單講下:

  LameEncodeJniNative.java 是本地封裝的native方法,為應(yīng)用層提供了2個方法,一個是編碼,一個是結(jié)束。這2個方法對應(yīng)c++層具體的實(shí)現(xiàn),可以看工程 cpp/目錄下文件的實(shí)現(xiàn),cpp文件里面的實(shí)現(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);

以上就是Android 如何采用Lame編碼器編碼mp3文件的詳細(xì)內(nèi)容,更多關(guān)于Android 編碼mp3文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解

    Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解

    本篇文章介紹如何利用Android Studio提供的Live Templates更優(yōu)雅實(shí)現(xiàn)自定義View的構(gòu)造方法,說句人話就是:簡化自定義View構(gòu)造參數(shù)模板代碼的編寫,實(shí)現(xiàn)自動生成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android View背景選擇器編寫技巧

    Android View背景選擇器編寫技巧

    本文主要介紹了Android View背景選擇器編寫技巧,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Android解析Intent Filter的方法

    Android解析Intent Filter的方法

    這篇文章主要介紹了Android解析Intent Filter的方法,較為詳細(xì)的分析了Intent解析的原理與相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Android GridView實(shí)現(xiàn)滾動到指定位置的方法

    Android GridView實(shí)現(xiàn)滾動到指定位置的方法

    這篇文章主要介紹了Android GridView實(shí)現(xiàn)滾動到指定位置的方法,本文介紹了4個相關(guān)的方法,分別對它們做了講解,需要的朋友可以參考下
    2015-06-06
  • Android仿京東搜索框漸變效果

    Android仿京東搜索框漸變效果

    這篇文章主要為大家詳細(xì)介紹了Android仿京東搜索框漸變效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Android編程實(shí)現(xiàn)創(chuàng)建,刪除,判斷快捷方式的方法

    Android編程實(shí)現(xiàn)創(chuàng)建,刪除,判斷快捷方式的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)創(chuàng)建,刪除,判斷快捷方式的方法,結(jié)合實(shí)例形式分析了Android編程針對快捷方式的常用操作技巧,需要的朋友可以參考下
    2017-02-02
  • 詳解用RxJava實(shí)現(xiàn)事件總線(Event Bus)

    詳解用RxJava實(shí)現(xiàn)事件總線(Event Bus)

    本篇文章主要介紹了用RxJava實(shí)現(xiàn)事件總線(Event Bus),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android ListView UI組件使用說明

    Android ListView UI組件使用說明

    這篇文章主要介紹了Android ListView UI組件使用說明,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 分析Android內(nèi)存泄漏的幾種可能

    分析Android內(nèi)存泄漏的幾種可能

    Java內(nèi)存泄漏指的是進(jìn)程中某些對象(垃圾對象)已經(jīng)沒有使用價值了,但是它們卻可以直接或間接地引用到gc roots導(dǎo)致無法被GC回收。本文詳細(xì)羅列了Android內(nèi)存泄漏的八種可能,有需要的可以參考下。
    2016-07-07
  • Android Button按鈕點(diǎn)擊背景和文字變化操作

    Android Button按鈕點(diǎn)擊背景和文字變化操作

    這篇文章主要介紹了Android Button按鈕點(diǎn)擊背景和文字變化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論