DSP

madplay移植过程 - 音频mp3解码器

2019-07-13 20:54发布

一、安装 yum install madplay 同时也可以手动安装,下载源码包,编译。 二、测试   上面提示没有设备文件dsp三、解决问题 自己手动创建设备文件是不可以的。madplay是根据OSS音频标准来写的,但是在新的内核中已经抛弃了这个,但是并不是说不可以用了,还是可以用的。 1、查看自己的内核版本号   运行uname -a 我的内核是3.4.2-1的,记住自己的内核版本,有用,如果你的内核就一个版本就不用了,(当你开机的时候会有提示让你选择内核版本,如何就一个的话,你的系统中内核就是一个版本)。 2、查看内核的配置 系统中的内核一般放在这个位置/usr/src/kernels cd /usr/src/kernels ls 我的fedora下一共有3个系统,选择当前的系统内核3.4.2-1,cd到内核中去 查看内核配置 sudo make menuconfig 要以root运行,因为这个内核正在运行,我们不需要修改,只是看一下他的配 置信息而已。按照下面的顺序访问:                  <*>Device Drivers---> <*>sound card support ---> <*>advanced linux soune architecture -->    <*>OSS Mixer API    <*>OSS PCM (digital audio) API 在当前的内核中是安装模块来编译的,我们进一步的跟踪就可以找到/dev/dsp设备的相关配置。这里主要看这两个选项OSS Mixer API和 OSS PCM (digital audio) API。 利用上下键来移动选项到这个两个选项中,利用左右键来选择可以看到详细的信息。 进去详细的信息说明中可以看到很多的信息。     基本上就是加载这个模块就看创建设备/dev/dsp了, 下面我就是要找到它的Kconfig,其实也不用找,但是为了详细的说明,我们按照流程赵一边。Defined at sount/core/Kconfig,现在我们进入这个目录,看以下Kconfig文件 在这里我们要的就是一个符号,就是config后面的这个符号,因为我们要在Makefile中查找编译后的模块的名称。 在当前的目录下一共有2个目录和一个Makefile、Kconfig我们现在进去oss目录中看看有没有makefile,因为我们这个模块就是oss,进去以后就可以看到就一个Makefile文件。     在最后一行就可以知道了模块的名称为snd-pcm-oss.ko在上面的我们提到要用到两个选项的,倒数第2行也很重要,因为他们都在OSS目录下,所以这个模块我们也要记住。snd-mixer-oss.ko。 前面这么多废话,其实就是为了找到这两个模块。现在找到了,但是模块放到那里去了呢,在自己编译的内核中,我们在指定的目录下就可以看到编译后的模块,但是在集成的系统中,我们去 那里找呢? /lib 目录中去找 在modules下可以看到有相应的内核目录,所以我们选择当前的内核。          进去kernel中去可以看到相应的内核目录,我们选择sound/core和查看配置文件是一样的方法。 加载这两个模块到系统中,两个都要加载。sudo insmod snd-mixer-oss.ko(必须先加载这个,否则下面的加载不上) sudo insmod snd-pcm-oss.ko 加载完成之后查看设备文件/dev/dsp是否已经创建了。ls /dev/dsp -l
四、运行madplay选择一首歌运行一下, 这是怎么回事?别急,我们看一下madplay的帮助文档man madplay 明白了吧,这说明这个文件的包含其他的信息数据,madplay无法解码这个文件。 我们在换一首歌试一下



madplay源码编译

音频解码器madplay移植 编者:从这一小节开始,友善官方带的手册就没有介绍了,根据一些参考书籍进行移植。这里移植的是音频解码器madplay. 需要的源码包:(我已经上传到我的资源里面了,可以直接下载 libid3tag-0.15.1b.tar.gz libmad-0.15.1b.tar.gz madplay-0.15.2b.tar.gz zlib-1.2.3.tar.bz2 1、建立madplay源代码目录madplay-source以存放madplay源码 创建源码目录 #mkdir /usr/local/madplay-source 2、然后将上面要求的四个文件拷贝到此文件夹下,然后解压到此文件夹下 tar -zxvf  libid3tag-0.15.1b.tar.gz tar -zxvf  libmad-0.15.1b.tar.gz tar -zxvf   madplay-0.15.2b.tar.gz tar -jxvf    zlib-1.2.3.tar.bz2 3、编译zlib库,为libid3tag提供函数支持 1)  #cd /usr/local/madplay-source/zlib-1.2.3       #./configure -shared --prefix=/usr/local/mymadplay/zlib-1.2.3 2) 修改Makefile 修改Makefile第19行: CC=arm-linux-gcc 修改Makefile第28行: LDSHARED=arm-linux-gcc -shared -W1,-soname,libz.so.1 修改Makefile第29行: CPP=arm-linux-gcc -E 修改Makefile第36行: AR=arm-linux-ar rc 修改Makefile第37行: RANLIB=arm-linux-ranlib 修改Makefile第42行:
prefix = /home/xxx/project/audio/mips/_install
3)编译并安装zlib库 #make #make install 4、编译libid3tag库 1)  #cd /usr/local/madplay-source/libid3tag       #./configure -shared --prefix=/usr/local/madplay-source/libid3tag CC=arm-linux-gcc --host arm-linux CPPFLAGS=-I/usr/local/mymadplay/zlib-1.2.3/include/ LDFLAGS=        -L/usr/local/mymadplay/zlib-1.2.3/lib/     #make     #make install 5、编译音频解码库libmad 1)  #cd /usr/local/madplay-source/libmad       #./configure -shared --prefix=/usr/local/madplay-source/libmad  CC=arm-linux-gcc --host arm-linux CPPFLAGS=-I/usr/local/mymadplay/libid3tag/include/ LDFLAGS=        -L/usr/local/mymadplay/libid3tag/lib/     #make     #make install note:如果此步骤出现err:unrecognized command line option -fforce-mem,找到Makefile,产找到-fforce-mem然后将其删除掉。 6、编译madplay应用程序 1)  #cd /usr/local/madplay-source/madplay-0.15.2 #./configure -shared --prefix=/usr/local/madplay-source/libmad  CC=arm-linux-gcc --host arm-linux CPPFLAGS=-I/usr/local/mymadplay/libid3tag/include/ -I/usr/local/madplay-source/libmad/include/ LDFLAGS= -L/usr/local/mymadplay/libmad/lib/ -L/usr/local/mymadplay/zlib/zlib-1.2.3/lib/ -L/usr/local/madplay-source/libid3tag/lib/     #make     #make install 7,移植madplay所需库文件到开发板 madplay运行时候只需要四个库文件,分别是libmad.so.0,libid3tag.so.0,libm.so.6,libc.so.6,其中后面的两个在开发板的/lib中已经存在,只需把前两个加入到/lib即可。但是 后面两个ls一下就可知道是一个链接,源文件分别是libmad.so.0.2.1以及libid3tag.so.0.3.0只要把这两个放入/lib下,然后建立刚才的链接。 8、移植madplay应用程序到开发板 把/usr/local/mymadplay/madplay-0.15.2/bin下的madplay复制到开发板的usr/bin/下,然后再找首歌曲,可以试试,基本就能正常播放了。 下面是我找了首可惜不是你播放的效果。名称我改为了123.mp3