ubuntu系统的apt-get install安装sox会解决库依赖的问题,但是如果嵌入式系统本身没有网络设备,则需要手动安装各种库,并且需要解决依赖的问题。现将ubuntu系统移植mp3解码和播放的过程列出:
1. zlib-1.2.3
zlib为id3格式解析库所依赖。
1)tar -zxvf zlib-1.2.3.tar.gz
2) ./configure --prefix=ZLIB_DIRECTORY (库安装目录) --disable-debugging --disable-shared --enable-static
3)make & make install
2. libid3tag-0.15.1b
mp3文件格式解析库
1)tar -zxvf libid3tag-0.15.1b.tar.gz
2) ./configure --prefix=ID3_DIRECTORY (库安装目录,需绝对目录) --disable-debugging --disable-shared --enable-static
3)make & make install
3. libmad-0.15.1b
mp3解码库
1)tar -zxvf libmad-0.15.1b.tar.gz
2) ./configure --prefix=ID3_DIRECTORY (库安装目录,需绝对目录) --disable-debugging --disable-shared --enable-static
3)make & make install
如编译出错有提示“--fforce-mem”,则删除Makefile里面出现的"-fforce-mem"
如出现“ does not support Thumb mode `rsc r0,r0,#0'”,则修改fixed.h文件,将
# define MAD_F_MLN(hi, lo)
asm ("rsbs %0, %2, #0
"
"rsc %1, %3, #0"
: "=r" (lo), "=r" (hi)
: "0" (lo), "1" (hi)
: "cc")
改为
#ifdef __thumb__
/* In Thumb-2, the RSB-immediate instruction is only allowed with a zero
operand. If needed this code can also support Thumb-1
(simply append "s" to the end of the second two instructions). */
# define MAD_F_MLN(hi, lo)
asm ("rsbs %0, %0, #0
"
" sbc %1, %1, %1
"
"sub %1, %1, %2"
: "+&r" (lo), "=&r" (hi)
: "r" (hi)
: "cc")
#else /* ! __thumb__ */
# define MAD_F_MLN(hi, lo)
asm ("rsbs %0, %2, #0
"
"rsc %1, %3, #0"
: "=r" (lo), "=r" (hi)
: "=&r" (lo), "=r" (hi)
: "0" (lo), "1" (hi)
: "cc")
#endif /* __thumb__ */
4. alsa-lib-1.1.6
声卡驱动,并提供上层音频应用调用接口,如下面的sox
1)tar -jxvf alsa-lib-1.1.6.tar.gz2
2) ./configure --prefix=ID3_DIRECTORY (库安装目录,需绝对目录) --disable-debugging --disable-shared --enable-static
3)make & make install
5. sox-14.4.1.tar.gz
音频工具箱,播放和录制应用程序,其播放play程序会调用mad解码库进行解码,并把解码数据送到alsa库去播放。
1)tar -zxvf sox-14.4.1.tar.gz
2) ./configure --prefix=ID3_DIRECTORY (库安装目录,需绝对目录) --disable-debugging --disable-shared --enable-static
3)make & make install
6. 将前面5个库的include文件拷贝到/usr/include, lib的文件拷贝到/usr/lib,并调用ldconfig。
或者自定义include和lib目录,一并拷贝,并将该目录配置到/etc/ld.so.conf,然后调用ldconfig.
7. 将sox的bin目录工具play,rec拷贝到/usr/bin,即可以使用命令行play hello.mp3进行播放了。
关注微信公众号:嵌入式企鹅圈,获取更多原创资讯。