• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Android-采用Lame编码器编码mp3文件

android 搞代码 3年前 (2022-03-01) 24次浏览 已收录 0个评论

这篇文章会基于上面3个问题来开展解说。

         1、什么是Lame?

         2、为什么采纳Lame?

         3、Lame在Android利用上如何应用?

 一、什么是Lame

 咱们看下Lame官网(https://lame.sourceforge.io/index.php)给的形容

   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地址:https://github.com/yorkZJC/AndroidLameEncodeMp3Demo.git
 代码逻辑这里简略讲下:

  LameEncodeJniNative.java 是本地封装的native办法,为应用层提供了2个办法,一个是编码,一个是完结。这2个办法对应c++层具体的实现,能够看工程 cpp/目录下文件的实现,cpp文件外面的实现也比较简单。
 ​

利用代码调用的时候,就是传入对应的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 Camera相干开发已有5年

目前在深圳下班

欢送大家关注我的微信公众号“小驰笔记”

大家一起学习交换


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Android-采用Lame编码器编码mp3文件

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址