91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android 怎么用Lame編碼器編碼mp3文件

發布時間:2021-03-15 11:14:47 來源:億速云 閱讀:245 作者:TREX 欄目:開發技術

這篇文章主要介紹“Android 怎么用Lame編碼器編碼mp3文件”,在日常操作中,相信很多人在Android 怎么用Lame編碼器編碼mp3文件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android 怎么用Lame編碼器編碼mp3文件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

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

         1、什么是Lame?

         2、為什么采用Lame?

         3、Lame在Android應用上如何使用?

一、什么是Lame

 我們看下Lame官網給的描述

   LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL.

 翻譯成中文就是:LAME是一個高質量的MPEG音頻層III (MP3)編碼器,在LGPL下授權。

  好了,現在我們知道Lame就是個開源的編碼器,而且是專門用來編碼mp3文件的。

二、為什么要采用Lame

 在Android上開發過錄音功能的同學應該知道,在Android上要實現錄音功能,有2種方式。一種是采用AudioRecord的方式,AudioRecord錄制的直接是原始的pcm數據,另一種方式就是采用MediaRecord,可以錄制類似amr、aac格式的文件。

 這里貼下MediaRecord目前支持的錄音格式,可以看到目前是不支持mp3的。那這時我們想要編碼mp3的文件,就得借助lame來實現了。

  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應用上如何使用

 在android上集成開源的代碼,很多時候套路都差不多,就是下載源碼,編譯出相關的so庫,然后就是調用這些庫提供的方法了,當然,調用so庫里面的方法,應用上需要借助jni來實現。

 這里就不介紹如何下載lame源碼和編碼so庫了。編譯lame源碼后,我們會得到一個libmp3lame.so 的庫文件,調用這個so庫里面的方法,還需要我們去實現JNI部分的代碼。

 整體的思路就是,應用層通過調用JNI提供的native方法,然后調用到 libmp3lame.so 庫里面的方法,實現編碼mp3文件。

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

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

  LameEncodeJniNative.java 是本地封裝的native方法,為應用層提供了2個方法,一個是編碼,一個是結束。這2個方法對應c++層具體的實現,可以看工程 cpp/目錄下文件的實現,cpp文件里面的實現也比較簡單。

Android 怎么用Lame編碼器編碼mp3文件

應用代碼調用的時候,就是傳入對應的pcm源文件和需要生成的mp3文件路徑,還有pcm源文件的格式信息(采用率、通道數、編碼數據位數)。

  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文件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇康县| 临潭县| 游戏| 常熟市| 南岸区| 临沧市| 西林县| 鲁山县| 突泉县| 新和县| 达州市| 友谊县| 遵义市| 阜平县| 德阳市| 台东市| 山阴县| 泰安市| 勐海县| 澜沧| 济南市| 崇阳县| 儋州市| 沙田区| 内丘县| 河东区| 台北市| 漾濞| 无极县| 绥江县| 永修县| 兴国县| 肥西县| 堆龙德庆县| 扎赉特旗| 肃宁县| 西乡县| 郸城县| 策勒县| 武鸣县| 嘉黎县|