由工作需要实现ARM板上MP3与wav格式互转,作为编上位机软件的我感觉这事根本搞不定,于是搜罗开源的库,最有名的应该是lame 和ffmpeg了,简单了解下ffmpeg支持多个格式文件的解码,貌似没有mp3编码功能,于是直接下载lame开调。lame是供学习mp3编解码用的
简单纪录下这几天的工作成果:
1.http://lame.sourceforge.net/ 下载了最新版3.100
2.ubuntu虚拟机中解压缩,打开Install,编译过程写的很详细
./configure --prefix=/usr/local/lame
make
make install
好了,生成的库和文件就在/usr/local/lame目录下了,这个默认是Ubuntu系统的环境,那就先试下吧。
照着USAGE中提示的命令,在/usr/local/lame/bin目录下,
./lame -f -b128 /root/mix.wav /root/mix.mp3
nice,成功了。如此简单,开始移植吧,把编译器换成arm交叉编译器,查了查参数貌似这样。
./configure --prefix=/usr/local/lame --host=arm-unknown-linux-gnu
make
duang!报错了
../libmp3lame/.libs/libmp3lame.a(quantize.o): In function `init_xrpow_core_init':
quantize.c:(.text+0x223): undefined reference to `init_xrpow_core_sse'
collect2: error: ld returned 1 exit status
Makefile:468: recipe for target 'lame' failed
提示缺少定义,查找源文件找到这行,看的也不大明白,应该是编译条件上出问题了,度娘了半天没一个方法能解决的。又开始尝试把源码加到QT中,调用函数接口来实现,把lame.h加进来,发现libm3lame库中都是解决MP3编解码最原始的函数,实际应用很不方便,应用的代码在frontend中,frontend中的函数考到QT下编译又出来诸多错误和报警,很是不爽,而且lame说调用源码比调用执行文件编码效率要低,心中一万头奔过。。。决定还是从编译问题上下手
最后,经高手提示,直接使用make方式编译,修改Makefile.unix文件,记得把之前的删掉从头来
# generic defaults. OS specific options go in versious sections below
PGM = lame
CC = gcc
CC_OPTS = -O
makefile中CC代表C语言编译器,修改CC=arm-linux-gnueabihf-gcc
具体编译器根据自己需求选择了。直接编译可能会出错,好像是arm不兼容vbr的功能。
还需要修改BRHIST_SWITCH 和LIBTERMCAP ,这两行屏蔽掉
##########################################################################
# LINUX
##########################################################################
ifeq ($(UNAME),Linux)
# The frame analyzer depends on gtk1.2. Uncomment the next 2 lines to get it
# GTK = -DHAVE_GTK `gtk-config --cflags`
# GTKLIBS = `gtk-config --libs`
# Comment out next 2 lines if you want to remove VBR histogram capability
# BRHIST_SWITCH = -DHAVE_TERMCAP -DHAVE_TERMCAP_H
# LIBTERMCAP = -lncurses
# uncomment to use LIBSNDFILE
# SNDLIB = -DLIBSNDFILE
# LIBSNDFILE=-lsndfile
保存。开始编译make -f Makefile.unix UNAME=linux ARCH=arm
编译成功后,照着Ubuntu系统生成的/usr/local/lame目录,移植frontend中lame到bin,移植include中lame.h,移植libmp3lame中libmp3lame.a,其他的删掉,把lame文件夹打包移植到ARM同样位置,
到/usr/local/lame/bin目录下尝试下编码./lame -f -b128 .wav .mp3
大功告成,哈哈。。修改/etc/profile中PATH,照猫画虎增加一个/usr/local/lame/bin,就可以直接在命令行掉lame命令了。
尝试了下解码功能lame --decode mix.mp3 mix.wav
完美,瞬间觉得开源太强大了,具体使用还要多看看USAGE文件。