[ 工具 ] ___ Library : Mad

一、介绍


libmad是一个高质量的MPEG音频解码器库,它由Robert LeslieUnderbit Technologies开发。libmad最初发布于2000年,目前最新版本是0.15.1b,支持所有三个层次的MPEG音频格式,即Layer ILayer IILayer III,并且还支持VBRVariable Bit Rate)和ABRAverage Bit Rate)编码方式。

libmad可以将MPEG音频流解码成PCM音频流,以便于后续处理和播放。它采用了一系列高质量的算法来实现MPEG音频流的解码,包括MDCTModified Discrete Cosine Transform)、Huffman解码、积分滤波器等。libmad提供了简单易用的API接口,开发者可以轻松地将其集成到自己的应用程序中。

libmad的代码遵循GNU通用公共许可证(GPL),这意味着任何人都可以免费使用和修改它。目前,libmad的维护和更新工作由开源社区进行。

具体来说,libmad的主要用途是在各种音频应用程序中对MPEG音频流进行解码。例如,在音乐播放器中,当用户选择播放MPEG格式的音频文件时,播放器就需要使用libmad来将该文件解码成PCM音频流,以便于后续的音频处理和播放。此外,libmad还可以用于其他需要解码MPEG音频流的应用程序,例如音频编辑软件、语音识别系统等。总的来说,libmad是一个高质量、跨平台、支持多种MPEG音频格式、简单易用的开源解码器,可以帮助开发者快速地实现MPEG音频流的解码,并且保证解码后的音频数据质量较高。

二、获取


源代码在官网当中可支持两种方式获取:Ftp或者SourceForge 镜像

三、构建


  • 创建安装目录,解压源码包,并进入目录进行配置
linux@localhost:~$ tar zxvf libmad-x.y.z.tar.gz
linux@localhost:~$ cd libmad-x.y.z
# 6818 如需要制作的是静态库,则需要把参数enable-shared --disable-static改为enable-static --disable-shared
linux@localhost:~/libmad-x.y.z$ ./configure --host=arm-none-linux-gnueabi --enable-fpm=default --enable-sso --enable-accuracy --disable-debugging --disable-dependency-tracking --with-pic --with-gnu-ld --prefix=${HOME}/libmad --enable-shared --disable-static
# 1808
linux@localhost:~/libmad-x.y.z$ ./configure --host=aarch64-linux-gnu --enable-fpm=default --enable-sso --enable-accuracy --disable-debugging --disable-dependency-tracking --with-pic --with-gnu-ld --prefix=${HOME}/libmad enable-shared --disable-static
  • 高版本Gcc已不支持-fforce-mem参数,So,剔除:
linux@localhost:~/libmad-x.y.z$ sed -i "s/-fforce-mem//g" Makefile
  • 编译并安装
linux@localhost:~/libmad-x.y.z$ make && make install

四、查看


  • 检查安装生成的文件是否是对应平台所需要的
linux@localhost:~/mad2arm$ ls -la  
total 0
drwxrwxrwx 1 linux linux 4096 Sep 22 00:06 .
drwxr-xr-x 1 linux linux 4096 Sep 22 00:05 ..
drwxrwxrwx 1 linux linux 4096 Sep 22 00:21 include
drwxrwxrwx 1 linux linux 4096 Sep 22 00:21 lib
linux@localhost:~/mad2arm$ tree
.
├── include
│   └── mad.h
└── lib
    ├── libmad.a
    ├── libmad.la
    ├── libmad.so -> libmad.so.x.y.z
    ├── libmad.so.x -> libmad.so.x.y.z
    └── libmad.so.x.y.z
2 directories, 6 files
linux@localhost:~/mad2arm$ file lib/libmad.so.x.y.z
lib/libmad.so.x.y.z: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, with debug_info, not stripped

确认无误后,即可将对应的库文件上传到开发板的lib目录中使用,当然也可以配合其他库文件进行相关的移植。

五、处理


    1. 问题:指定新版交叉编译器无法进行识别:
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
    1. 解决:原因是使用--host指定参数时,而源码包中的config.subconfig.guess文件不是最新版本所导致的,拷贝下载新版本的配置基础文件
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'
  • 错误:编译时提示错误,原因时指定浮点运算方式为arm时不适用
linux@localhost:~/libmad-x.y.z$ make
make[2]: *** [Makefile:383: synth.lo] Error 1
  • 解决:指定浮点运算为默认
linux@localhost:~/libmad-x.y.z$ ./configure --host=aarch64-linux-gnu --enable-fpm=default --enable-sso --enable-accuracy --enable-gnu-ld --disable-debugging --prefix=${HOME}/mad2arm

六、例程


当使用libmad解码MPEG音频数据时,通常需要执行以下步骤:

  1. 初始化解码器:使用 mad_decoder_init() 函数初始化解码器,并设置回调函数来处理输入、输出和错误。

  2. 读取输入数据:在循环中使用fread() 函数从文件中读取MPEG音频数据,并将其存储到缓冲区中。

  3. 解码音频数据:使用 mad_decoder_run() 函数解码缓冲区中的MPEG音频数据。这个函数会返回一个整数值,指示解码器是否成功解码了音频数据。

  4. 获取PCM数据:如果解码器成功解码了音频数据,则可以使用mad_decoder_finish()函数获取解码后的PCM数据。这个函数会返回解码后的PCM帧数,以及PCM数据的指针。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值