![c5e2d982f20c0fdb24dffb5689ec1000.png](https://i-blog.csdnimg.cn/blog_migrate/dff536579631877e4ffa5c8cea76646e.jpeg)
大家好,我是兔子。
是一个嵌入式软硬件工程师。
正在从单片机开发转岗Linux开发。
兔子这次试用ALSA功能,并使用编译出来的播放工具来播放.wav格式的音乐。
PS:实际上,绝大多数开发板已经有ALSA及相关音频播放工具的功能了。固件不带ALSA功能的开发板少之又少。只是兔子我手上的周立功i.MX287开发板,新版本的固件没有这个功能。
正好,我就单独来编译一次ALSA功能,并将其集成到周立功i.MX287的开发板中。
(如果各位是使用其他的开发板,可以输入aplay –l命令。能看到终端打印开发板声卡的信息,则表明已经自带了ALSA功能。可以往开发板里传入一个.wav格式的音频歌曲。
使用aplay xxx.wav来播放歌曲,xxx.wav表示歌曲的文件名)
![e78ff245c7fe71cb335bf52a8ab136a8.png](https://i-blog.csdnimg.cn/blog_migrate/db48fa560f0519a72acd42579ad8f5f6.png)
1.什么是ALSA
ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统)。
2. ALSA及播放工具编译
和兔子一起,去ALSA的官网上下载最新的ALSA库。
https://www.alsa-project.org/wiki/Main_Page
![71c3cc8a7e6ee0ccf9a1c89f2d608da0.png](https://i-blog.csdnimg.cn/blog_migrate/1e73cc888a4c334d7521641282dc422b.jpeg)
可以看到,目前ALSA最新的版本是1.1.9.
对于我们开发板,只需要下载alsa-lib-1.1.9及alsa-utils-1.1.9即可。
两个文件下载好后,上传到虚拟机的/opt目录下。并解压。
![7667b1c42b36cd955066efef09405eae.png](https://i-blog.csdnimg.cn/blog_migrate/df35701c5439c4330301c5a81b0cb89d.jpeg)
解压,输入命令
tar -jxvf alsa-lib-1.1.9.tar.bz2
tar -jxvf alsa-utils-1.1.9.tar.bz2
可以看到,两个文件以及解压好了。
![80b83e7cc72d970e02d2799ccde4dc06.png](https://i-blog.csdnimg.cn/blog_migrate/4397283da9b7d367ed5bb10dc426bbfe.jpeg)
1)编译alsa-lib
先输入指令
cd alsa-lib-1.1.9
进入alsa-lib-1.1.9文件夹里。
输入alsa库的编译配置
CC=arm-fsl-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/alsa
<1> CC=arm-fsl-linux-gnueabi-gcc表示指定的编译工具为arm-fsl-linux-gnueabi-gcc
<2> prefix=/opt/alsa 表示最终编译生成及库调用的路径为/opt/alsa
![d879c36cbf26ac5a7cc2c9a79bb6e76d.png](https://i-blog.csdnimg.cn/blog_migrate/05e970cee2e0db58973cededee6ae95e.png)
等待一会,可以看到无错误。表示配置通过。
![d8f9508c4c238d415b9b2d6bc174232e.png](https://i-blog.csdnimg.cn/blog_migrate/2d3014168cc8d30b65cdb34cd296aeb2.jpeg)
输入make指令,等待编译通过后。
如果无错误,
再输入sudo make install 安装最终生成的文件。
这时,可以在/opt目录下,看到新生成的文件夹alsa
表示alsa-lib安装成功。
![fb02e38e850cd878dafe41557d2abba8.png](https://i-blog.csdnimg.cn/blog_migrate/6ee4a328ccb7fd50b49bde7cb3866dfe.jpeg)
2)编译alsa-utils
cd alsa-utils-1.1.9
进入alsa- utils -1.1.9文件夹里。
输入alsa-utils的编译配置
CC=arm-fsl-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/alsa CFLAGS="-I/opt/alsa/include" LDFLAGS="-L/opt/alsa/lib -lasound" --disable-alsamixer --disable-xmlto --disable-nls
说明
<1> --prefix指定了alsa-utils最终编译生成的目录
<2> CFLAGS=及LDFLAGS=.
由于编译需要alsa-lib的支持,所以需要指明alsa-lib的库及头文件的目录。
<3> alsamixer是图形化的amixer工具,需要ncurses的支持,在secure CRT中乱码,怕麻烦用--disable-alsamixer禁用了它.
等待一会,看到无错误,表示配置通过。
![4bb2f7eb1904d425b6a9fdc889217c3e.png](https://i-blog.csdnimg.cn/blog_migrate/9e1da7a7879db6a72db22e000f321702.jpeg)
输入make指令,等待编译通过后。
如果无错误,
再输入make install 安装最终生成的文件。
make install 时遇到错误。
![d3fa97ac621e629f313b8e7934862092.png](https://i-blog.csdnimg.cn/blog_migrate/f9dda0263a7dcf19253ed4a15d605dda.jpeg)
可以看到,提示是权限不够。
是因为/opt目录下是只有root用户才能读写操作。
输入指令make clean,清除make install生产的临时文件。
重新make一下。
再输入指令 sudo make install
就可以了。
至此,ALSA所有文件以及全部编译通过。都生成在/opt的alsa目录里。
3)打包,带走
在虚拟机的/opt目录下。
输入指令
sudo tar –cvf alsa.tar alsa/
则在/opt目录下生成了alsa.tar压缩包。
![ee1d092e4c0476bf3ebb5e175576f404.png](https://i-blog.csdnimg.cn/blog_migrate/6ef0abb1d7464bc41257507bdc4d337c.jpeg)
Ps:主要是文件夹里有链接文件,直接整个目录复制,会导致链接文件失效。打包成压缩包,是可以避免链接文件失效。
![317db3053f0046091211147f68cf3417.png](https://i-blog.csdnimg.cn/blog_migrate/99df2438d712f3fa1eb732f5140e9cfb.jpeg)
3.开发板安装ALSA
将生成的alsa.tar拷贝到开发板的/opt目录下。
并解压
tar –xvf alsa.tar
![8fb92306dd477c66d7f77281d8bd0a70.png](https://i-blog.csdnimg.cn/blog_migrate/51dc6e1a3b4477d60523b3dd9ffaf49d.jpeg)
可以看到,在开发板的/opt目录下,生成了alsa文件夹。
![6a00ebcd871099c8bd5198b0a2afc7e0.png](https://i-blog.csdnimg.cn/blog_migrate/057199dc57db8d5cf6fba1fe7d93b375.png)
(如果不清楚如何拷贝,可以移步教程3)
兔子MCU:从51单片机到Linux 开发板传文件利器-NFS(教程3)zhuanlan.zhihu.com![e3046d3f36f3dcf4e52cea0bd8df7cd9.png](https://i-blog.csdnimg.cn/blog_migrate/2ccaa6985f3807b25c6290ae076f41bb.jpeg)
进入alsa/lib目录下,将所有文件一起打包。
tar –cvf libalsa.tar *
这里都是alsa功能的动态库文件。
![9b21eb8a656579e61b1cc8e59d7ff5ee.png](https://i-blog.csdnimg.cn/blog_migrate/20290c596b4b8740464ecacad38be8b1.jpeg)
然后将生成的压缩包libalsa.tar复制到/usr/lib下解压。
<1>需要先重新挂载一下目录
mount –o remount rw / (由于开发板根文件系统做了写保护处理,需要重新挂载一下,在可以往/usr/lib目录下存文件)
<2>cp libalsa.tar /usr/lib
<3>进入/usr/lib目录下,将压缩包解压。
cd /usr/lib
tar –xvf libalsa.tar
<4> 进入/opt/alsa/bin目录下
cp aplay amixer /usr/sbin
将测试工具
aplay,amixer两个测试工具拷贝到开发板/usr/sbin目录下。
(aplay是播放及录制.wav音频的测试工具,amixer是调节音量大小的工具,由于开发板上无麦克风,所以只能播放.wav来测试)
至此,ALSA及测试工具都已经在开发板上安装完毕。
4.测试验证
<1> 插上耳机。
<2> 给开发板上传一个.wav格式的音乐。
<3> 输入命令amixer set Master 252 将音量调节到最大
![6af5141808e5056318098bd204742d7e.png](https://i-blog.csdnimg.cn/blog_migrate/6b89d4ecc0718c66d836a77accd011a0.jpeg)
<4>输入aplay xx.wav命令,开始欣赏音乐
![d69724675a5e230a4cfb110aa7418e07.png](https://i-blog.csdnimg.cn/blog_migrate/41bd8045a9edf9de80ebc9b8878e5697.jpeg)
PS:测试工具只能播放.wav格式的音乐播放。
5.音乐欣赏
![f010bf87fa7c1bd829e87d4bb64eccc3.png](https://i-blog.csdnimg.cn/blog_migrate/0f553e77ad84c4eeee9293e3a7be560b.jpeg)
如果想播放跟多格式的音乐,或者播放视频。可以使用MPlayer来播放。
下一个教程,MPlayer播放器的移植。播放跟多格式的音乐和视频。
![e0958e2f07916b9c90f2b2ba2af88151.png](https://i-blog.csdnimg.cn/blog_migrate/929c74865ff11c1c7d60c9fa73798a45.jpeg)
![f922c41f6b96b28ec54b6f3582636bfb.png](https://i-blog.csdnimg.cn/blog_migrate/2f0d3dc26a439209a967222fadb33ea0.jpeg)