一、安装
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