一,介绍
- 高质量的
MPEG
音频解码器; - 基于
ISO/IEC
标准的全新实现; - 根据
GNU
通用公共许可证(GPL
)条款提供; - 该软件以库(
libmad
)和命令行前端(madplay
)的形式分发,还包括一个ID3
标签操作库(libid3tag
); - 使用
100%
定点(整数)计算而不是浮点计算,所以它非常适合没有浮点单元的体系结构。所有计算都使用32位定点整数表示进行; - 提供完整的24位
PCM
输出,使用MAD
的应用程序能够产生异常高质量的音频。即使输出设备只支持16位PCM
,应用程序也可以使用额外的分辨率通过使用抖动或噪声整形来增加可听动态范围;
二,获取
在官网当中可支持两种方式获取源代码:Ftp或者SourceForge 镜像。
三,构建
- 依赖项:查阅自述文件,得知:在构建这个包之前,首先必须构建和安装
libid3tag
和libmad
;
BUILDING AND INSTALLING
Before you can build this package, you must first build and install the
libmad and libid3tag packages distributed separately.
So
,依次编译安装,把madplay
的依赖项安装(次序不能错)。
- 解压源码包,并进去目录进行配置(默认是开启静态配置,所以不需要动态库拷贝);
linux@localhost:~$ tar zxvf madplay-x.y.z.tar.gz
linux@localhost:~$ cd madplay-x.y.z/
# 6818
linux@localhost:~/madplay-x.y.z$ ./configure --host=arm-none-linux-gnueabi --prefix=${HOME}/madplay2arm --disable-debugging --enable-gnu-ld CPPFLAGS="-I${HOME}/mad2arm/include -I${HOME}/zlib2arm/include -I${HOME}/id3tag2arm/include" LDFLAGS="-L${HOME}/mad2arm/lib -L${HOME}/zlib2arm/lib -L${HOME}/id3tag2arm/lib" --enable-static --disable-shared
# 1808
linux@localhost:~/madplay-x.y.z$ ./configure --host=aarch64-linux-gnu --prefix=${HOME}/madplay2arm --disable-debugging --enable-gnu-ld CPPFLAGS="-I${HOME}/mad2arm/include -I${HOME}/zlib2arm/include -I${HOME}/id3tag2arm/include" LDFLAGS="-L${HOME}/mad2arm/lib -L${HOME}/zlib2arm/lib -L${HOME}/id3tag2arm/lib" --enable-static --disable-shared
- 编译
linux@localhost:~/madplay-0.15.2b$ make
- 取出编译完成的最后一条指令,生成不依赖动态库文件的应用程序
linux@localhost:~/madplay-0.15.2b$ arm-none-linux-gnueabi-gcc -Wall -O2 -fomit-frame-pointer -o madplay madplay.o getopt.o getopt1.o version.o resample.o filter.o tag.o crc.o rgain.o player.o audio.o audio_aiff.o audio_cdda.o audio_hex.o audio_null.o audio_raw.o audio_snd.o audio_wave.o audio_oss.o -L${HOME}/mad2arm/lib -L${HOME}/zlib2arm/lib -L${HOME}/id3tag2arm/lib ${HOME}/mad2arm/lib/libmad.a ${HOME}/id3tag2arm/lib/libid3tag.a -lz -lm -static
- 安装
linux@localhost:~/madplay-0.15.2b$ make install
四,查看
- 检查安装生成的文件是否是对应平台所需要的
linux@localhost:~/madplay2arm$ ls -la
total 0
drwxrwxrwx 1 linux linux 4096 Oct 26 01:53 .
drwxr-xr-x 1 linux linux 4096 Oct 26 01:43 ..
drwxrwxrwx 1 linux linux 4096 Oct 26 01:53 bin
drwxrwxrwx 1 linux linux 4096 Oct 26 01:53 man
drwxrwxrwx 1 linux linux 4096 Oct 26 01:53 share
linux@localhost:~/madplay2arm$ file bin/madplay
bin/madplay: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, with debug_info, not stripped
确认无误后,即可将可执行程序和相关的库上传到开发板上的根目录下的bin
和lib
目录,上传到开发板的应用程序相当于新创建的文件,要给当前可执行程序赋予执行权限。
root@arm:/# chmod +x /bin/madplay
查看帮助确定参数,然后就可以用它来播放音乐了呀。
五,方法
-
- 问题:原因是使用
--host
指定参数时,而源码包中的config.sub
和config.guess
文件不是最新版本所导致的
- 问题:原因是使用
linux@localhost:~/libmad-x.y.z$ ./configure --host=aarch64-linux-gnu --enable-fpm=arm --enable-sso --enable-accuracy --enable-gnu-ld --enable-speed --disable-debugging --prefix=${HOME}/mad2arm
checking host system type... Invalid configuration `aarch64-linux-gnu': machine `aarch64' not recognized
configure: error: /bin/bash ./config.sub aarch64-linux-gnu failed
-
- 解决:下载新版的基础配置文件
linux@localhost:~/libmad-x.y.z$ wget -O config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
linux@localhost:~/libmad-x.y.z$ wget -O config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'