Android 如何采用Lame编码器编码mp3文件

 更新时间:2021年03月15日 09:03:23   作者:小驰笔记  
这篇文章主要介绍了Android 如何采用Lame编码器编码mp3文件,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

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

         1、什么是Lame?

         2、为什么采用Lame?

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

一、什么是Lame

 我们看下Lame官网(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地址:github.com/yorkZJC/And…  代码逻辑这里简单讲下:

  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 如何采用Lame编码器编码mp3文件的详细内容,更多关于Android 编码mp3文件的资料请关注脚本之家其它相关文章!

相关文章

  • Android基于MLKit实现条形码扫码的代码示例

    Android基于MLKit实现条形码扫码的代码示例

    这篇文章将借助开源库 MLKit 实现条形码扫描,对于商品条形码也可以很好地识别成功,该库的使用内容非常丰富,除了条码识别,还有文字识别、图像标记、人脸检测等等,本文篇文章就只介绍最基本的条形码扫描使用,需要的朋友可以参考下
    2023-08-08
  • Android列表控件Spinner简单用法示例

    Android列表控件Spinner简单用法示例

    这篇文章主要介绍了Android列表控件Spinner简单用法,结合实例形式分析了Android列表控件Spinner的布局与功能实现技巧,需要的朋友可以参考下
    2017-12-12
  • Android简单音乐播放实例

    Android简单音乐播放实例

    这篇文章主要介绍了Android简单音乐播放实例,详细介绍了Android Service使用方法
    2015-12-12
  • android的got表HOOK实现代码

    android的got表HOOK实现代码

    对于android的so文件的hook根据ELF文件特性分为:Got表hook、Sym表hook和inline hook等。今天通过本文给大家介绍android HOOK实现got表的实例代码,需要的朋友参考下吧
    2021-08-08
  • Android 优化之存储优化的实现

    Android 优化之存储优化的实现

    这篇文章主要介绍了Android 优化之存储优化的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Toast类避免显示时间叠加的方法

    Toast类避免显示时间叠加的方法

    这篇文章主要为大家详细介绍了Toast类避免显示时间叠加的方法,线程中可用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android中底部菜单被输入法顶上去的解决方案

    Android中底部菜单被输入法顶上去的解决方案

    我们一般的解决方法是获取焦点,底部隐藏,失去焦点,底部菜单出现,但是,有些人会点击这个按钮收起键牌。这篇文章主要介绍了Android中底部菜单被输入法顶上去的解决方案,需要的朋友参考下吧
    2017-01-01
  • Android 程序应用的生命周期

    Android 程序应用的生命周期

    本篇文章小编为大家介绍,Android 程序应用的生命周期。需要的朋友参考下
    2013-04-04
  • Android实现滑动屏幕切换图片

    Android实现滑动屏幕切换图片

    这篇文章主要为大家详细介绍了Android实现滑动屏幕切换图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android加载View中Background详解

    Android加载View中Background详解

    本文讲解的是Android什么时候进行View中Background的加载,十分的详尽,十分全面细致,附上所有代码,这里推荐给大家,希望大家能够喜欢。
    2015-03-03

最新评论