最新lame音频库的编译与集成

最近项目很忙成狗,想写点儿东西都没时间,各种蛋疼的需求,程序员的生活真特么苦逼,抱怨两句,开始正文。

在一个公司中,一个app的开发基本上都是两端(ios和Android)开发,而保证两端的一致性很重要,比如说录音功能,ios和Android的各自平台上录音功能存在兼容性问题,在Android平台上的录音格式,可能在Android能够正常解析,但是到了ios可就不一定了,所以今天介绍一下高质量的音频库lame。不了解该音频库的可以自行上官网查看,最新的lame库版本为3.100,3.99还版本还是12年更新的,所以本文主要是介绍lame最新库3.100的编译与集成使用。首先非常感谢作者yhirano的开源项目Mp3VoiceRecorderSampleForAndroid, 基于此基础编译新so库。

1.下载3.100 lame库,lame库下载地址在这里

2. 将lame 3.100中的libmp3lame整个文件夹拷贝到自己项目jni目录下

3.将Mp3VoiceRecorderSampleForAndroid中的SampleLame.java和RecMicToMp3.java文件拷贝到自己的java项目中,使用javac命令编译SampleLame.java文件,再通过javah命令生成.h文件,然后编写.c文件(可以参照文中的开源项目,可以直接拿来用),编写Android.mk文件,通过ndk编译。

编译过程中会报如下错误

jni/libmp3lame_3.100/bitstream.c:33:10: fatal error: 'lame.h' file not found

很明显是没有找到lame.h这个头文件,此时我们需要回到我们下载的库中找到include文件夹找到lame.h放到我们的libmp3lame_3.100文件夹下,再次ndk-build编译,此时又会出现错误如下

jni/libmp3lame_3.100/util.h:570:12: error: unknown type name 'ieee754_float32_t'
    extern ieee754_float32_t fast_log2(ieee754_float32_t x);
           ^
jni/libmp3lame_3.100/util.h:570:40: error: unknown type name 'ieee754_float32_t'
    extern ieee754_float32_t fast_log2(ieee754_float32_t x);

既然如此,那就去util.h中找到这个未知类型,然后将ieee754_float32_t替换成我们熟知的float类型,再次ndk-build

jni/libmp3lame_3.100/set_get.h:24:10: error: 'lame.h' file not found with <angled> include; use "quotes" instead
#include <lame.h>
         ^~~~~~~~
         "lame.h"

错误很明显啦,找到set_get.h将#include<lame.h>改成#include "lame.h",继续ndk-build命令

[armeabi] SharedLibrary  : libmp3lame.so
jni/libmp3lame_3.100/id3tag.c:654: error: undefined reference to 'bcopy'
jni/libmp3lame_3.100/id3tag.c:426: error: undefined reference to 'bcopy'
jni/libmp3lame_3.100/id3tag.c:1205: error: undefined reference to 'index'
jni/libmp3lame_3.100/id3tag.c:452: error: undefined reference to 'bcopy'
jni/libmp3lame_3.100/quantize.c:1307: error: undefined reference to 'bcopy'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
擦,还让不让人玩了,继续纠错,发现bcopy未定义的引用,后来网上查资料才发现

如果是x86_64的话需要在Application.mk中加上

//Application.mk
APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64
APP_CFLAGS += -DSTDC_HEADERS
否则就会报如上面的错误。再次编译,发现没有任何错误,心里那个舒坦啊,爽。

以上就是集成编译最新lame库遇到的坑,mark下。

最后附上LameDemo一份,包含已经解决错误的lame库一份以及编译好的so库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值