前言
这篇文章主要是记录一下自己在应用层使用alsa-lib
跟alsa-util
,主要是amixer
跟mplayer
的使用,所以是在音频驱动跟LCD驱动已经加载好的情况下去做这件事情的。
内核起来后,可以看到已经有alsa device
对于声卡设备,在/dev/snd
下也有相关的节点
这里简单的说下每个节点的作用
-
controlC0
:用于声卡控制,C0
表示Card 0
,也就是声卡0
-
pcmC0D0c
和pcmC0D1c
:用于录音的pcm
设备,最后的字母c
代表capture
,表示录音,C0D0
和C0D1
分表表示声卡0
中的设备0
和设备1
-
pcmC0D0p
和pcmC0D1p
:用于录音的pcm
设备,最后的字母p
代表playback
,表示放音,C0D0
和C0D1
分表表示声卡0
中的设备0
和设备1
-
timer
:定时器
alsa-lib与alsa-utils交叉编译及安装
alsa-lib
是一个工具库,alsa-utils
是一系列依赖alsa-lib
的工具
准备工作
因为alsa-lib
编译过程中会生成一些配置文件,而这些配置信息的路径都是绝对路径,为了保持路径一致,在板子跟自己的ubuntu
系统中都创建一个/usr/share/arm-alsa
目录
下载源码
来到这个网站,点击Download
点击红框
alsa-lib
选择的是1.2.6
alsa-utils
选择的是1.2.6
编译alsa-lib
先解压tar -vxjf alsa-lib-1.2.2.tar.bz2
解压后进入源码文件夹,在文件夹下先创建tools
文件夹,放置成果物,然后configure
配置,生成Makefile
./configure --host=arm-linux-gnueabihf --prefix=/home/copyright/alsa-lib/alsa-lib-1.2.6/tools --with-configdir=/usr/share/arm-alsa
接下来
make
sudo make install
可以看到tools
文件夹下跟/usr/share/arm-alsa
下的成果物
放置成果物到板子中
-
将
tools/lib
下的东西全部复制到板子上的/usr/lib
下 -
/usr/share/arm-alsa
的内容放到板子的/usr/share/arm-alsa
再上述编译的过程中,碰到了编译的错误,大意就是无法找到交叉编译工具链arm-linux-gnueabihf-gcc
,解决方法是
- 先切换到
root
- 重新执行
/etc/profile
- 最后
make
make install
- 切换回普通用户
sudo -s
source /etc/profile
make
make install
su copyright
当时解决这个问题耽误了很久,也没截图下来,比较可惜
编译alsa-utils
下载源码后解压
tar -vxjf alsa-utils-1.2.6.tar.bz2
解压后进入源码文件夹,在文件夹下先创建tools
文件夹,放置成果物,然后configure
配置,生成Makefile
./configure --host=arm-linux-gnueabihf --prefix=/home/copyright/alsa-utils/alsa-utils-1.2.6/tools --with-alsa-inc-prefix=/home/copyright/alsa-lib/alsa-lib-1.2.6/tools/include/ --with-alsa-prefix=/home/copyright/alsa-lib/alsa-lib-1.2.6/tools/lib/ --disable-alsamixer --disable-xmlto
将tools
文件夹 下的bin
,sbin
和 share
这三个目录中的所有文件分别拷贝到开发板根目录下的 /bin
,/sbin
和/usr/share/alsa
目录下
打开板子根文件系统中的/etc/profile
文件,在里面加入如下所示内容:
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
ALSA_CONFIG_PATH
用于指定 alsa
的配置文件,这个配置文件是 alsa-lib
编译出来的。
amixer使用
可以看出,amixer
软件命令分为两组,scontrols
、scontents
、sset
和 sget
为一组,controls
、contents
、cset
和 cget
为另一组。这两组的基本功能都是一样的,只不过s
开头的是simple
(简单)组,这一组命令是简化版。
-
amixer controls
:查看所有设置项
-
amixer scontents
:查看设置值
知道有哪些设置项跟设置值,就可以用下面的命令
amixer sset
设置项目 设置值amixer cset
设置项目 设置值amixer sget
设置项目amixer cget
设置项目
音乐播放测试
amixer sset Headphone 100,100 #设置耳机音量
amixer sset Speaker 120,120 #设置喇叭音量
amixer sset 'Right Output Mixer PCM' on #左声道开启
amixer sset 'Left Output Mixer PCM' on #右声道开启
使用aplay
播放wav
文件
这时候如果插入耳机,声音就会传入耳机里面
不过在播放mp3
的时候,aplay
无法解析,都是噪声,不过下面即将介绍的mplayer
可以播放mp3
aplay
支持的类型可以通过aplay --help
查看
mic录音测试
使用 amixer 设置声卡
准备mic_in_config.sh
脚本
#!/bin/sh
#设置捕获的音量
amixer cset name='Capture Volume' 90,90
#PCM
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256
amixer sset 'Right Output Mixer PCM' on
amixer sset 'Left Output Mixer PCM' on
#ADC PCM
amixer sset 'ADC PCM' 200
#耳机/喇叭(扬声器)设置播放音量,直流/交流
#Turn on Headphone
amixer sset 'Headphone Playback ZC' on
#Set the volume of your headphones(98% volume,127 is the MaxVolume)
amixer sset Headphone 125,125
#Turn on the speaker
amixer sset 'Speaker Playback ZC' on
#Set the volume of your Speaker(98% volume,127 is the MaxVolume)
amixer sset Speaker 125,125
#Set the volume of your Speaker AC(80% volume,100 is the MaxVolume)
amixer sset 'Speaker AC' 4
#Set the volume of your Speaker AC(80% volume,5 is the MaxVolume)
amixer sset 'Speaker DC' 4
#音频输入,左声道管理
#Turn on Left Input Mixer Boost
amixer sset 'Left Input Mixer Boost' off
amixer sset 'Left Boost Mixer LINPUT1' off
amixer sset 'Left Input Boost Mixer LINPUT1' 0
amixer sset 'Left Boost Mixer LINPUT2' off
amixer sset 'Left Input Boost Mixer LINPUT2' 0
#Turn off Left Boost Mixer LINPUT3
amixer sset 'Left Boost Mixer LINPUT3' off
amixer sset 'Left Input Boost Mixer LINPUT3' 0
#音频输入,右声道管理,全部关闭
#Turn on Right Input Mixer Boost
amixer sset 'Right Input Mixer Boost' on
amixer sset 'Right Boost Mixer RINPUT1' off
amixer sset 'Right Input Boost Mixer RINPUT2' 0
amixer sset 'Right Boost Mixer RINPUT2' on
amixer sset 'Right Input Boost Mixer RINPUT2' 127
amixer sset 'Right Boost Mixer RINPUT3' off
amixer sset 'Right Input Boost Mixer RINPUT3' 0
执行脚本
使用 arecord 录制音频
使用arecord
来录制一段10
秒音频,arecord
也是 alsa-utils
编译出来的工具,输入如下命令:
arecord -f cd -d 10 record.wav
-f
是设置录音质量,-f cd
表示录音质量为cd
级别-d
是指定录音时间,单位是s
录制完成以后使用 aplay
播放刚刚录制的音频
单声道 MIC 录制立体声音频
LINE IN 录音测试
使用 amixer 设置声卡
准备line_in_config
脚本
#!/bin/sh
#设置捕获的音量
amixer cset name='Capture Volume' 100,100
#PCM
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256
amixer sset 'Right Output Mixer PCM' on
amixer sset 'Left Output Mixer PCM' on
#ADC PCM
amixer sset 'ADC PCM' 200
#录音前应该设置耳机或者扬声器的音量为 0(下面并没有设置)防止干扰
#耳机/喇叭(扬声器)设置播放音量,直流/交流
#Turn on Headphone
amixer sset 'Headphone Playback ZC' on
#Set the volume of your headphones(98% volume,127 is the MaxVolume)
amixer sset Headphone 125,125
#Turn on the speaker
amixer sset 'Speaker Playback ZC' on
#Set the volume of your Speaker(98% volume,127 is the MaxVolume)
amixer sset Speaker 125,125
#Set the volume of your Speaker AC(80% volume,100 is the MaxVolume)
amixer sset 'Speaker AC' 4
#Set the volume of your Speaker AC(80% volume,5 is the MaxVolume)
amixer sset 'Speaker DC' 4
#音频输入,左声道管理
#Turn off Left Input Mixer Boost
amixer sset 'Left Input Mixer Boost' on
#关闭其他通道输入
amixer sset 'Left Boost Mixer LINPUT1' off
amixer sset 'Left Input Boost Mixer LINPUT1' 0
#关闭麦克风左声道输入
amixer sset 'Left Boost Mixer LINPUT2' on
amixer sset 'Left Input Boost Mixer LINPUT2' 127
#Line_in 右声道输入关闭
amixer sset 'Left Boost Mixer LINPUT3' off
amixer sset 'Left Input Boost Mixer LINPUT3' 0
#音频输入,右声道管理
#Turn on Right Input Mixer Boost
amixer sset 'Right Input Mixer Boost' on
amixer sset 'Right Boost Mixer RINPUT1' off
amixer sset 'Right Input Boost Mixer RINPUT1' 0
amixer sset 'Right Boost Mixer RINPUT2' off
amixer sset 'Right Input Boost Mixer RINPUT2' 0
#要想设置成音频输入,请打开 RINPUT3,看原理图可知
#其他的声道通过上面的配置可关闭,这样是为了避免干扰,需要的时候就打开
#RINPUT3 打开(关键点)
amixer sset 'Right Boost Mixer RINPUT3' on
amixer sset 'Right Input Boost Mixer RINPUT3' 127
执行脚本
使用 arecord 录制音频
用一条公对公的3.5mm
音频线,将电脑跟板子上的接口连接起来,执行下面的录音命令
arecord -f cd -d 10 record.wav
录制完成以后使用 aplay
播放刚刚录制的音频
mplayer编译
zlib交叉编译
如果想用mplayer
工具,需要alsa-lib
和 zlib
这两个库,alsa-lib
库前面已经编译过以及安装过了,这次来交叉编译zlib
先来到官网,下载源码,如红框所示
解压
tar -vxzf zlib-1.2.11.tar.gz
同之前一样我们在解压后的源码文件夹下创建tools
文件夹
输入如下命令进行工具链的配置
CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld AD=arm-linux-gnueabihf-as ./configure --prefix=/home/copyright/zlib/zlib-1.2.11/tools
配置后会生成Makefile
,然后执行make
跟make install
将tools
下的lib
文件夹内的所有内容拷贝到板子的/lib
目录下
mplayer编译
先来到官网,下载源码,如红框所示
解压命令
tar -vxzf MPlayer-1.4.tar.gz
同之前一样我们在解压后的源码文件夹下创建tools
文件夹
输入下面命令进行配置
copyright@copyright-Vostro-3559:~/mplayer/MPlayer-1.4$ ./configure --cc=arm-linux-gnueabihf-gcc --host-cc=gcc --target=arm-linux-gnueabihf --disable-ossaudio --enable-alsa --prefix=/home/copyright/mplayer/MPlayer-1.4/tools --extra-cflags="-I/home/copyright/zlib/zlib-1.2.11/tools/include -I/home/copyright/alsa-lib/alsa-lib-1.2.6/tools/include" --extra-ldflags="-L/home/copyright/zlib/zlib-1.2.11/tools/lib -Iz -L/home/copyright/alsa-lib/alsa-lib-1.2.6/tools/lib -lasound" --enable-fbdev --disable-mencoder
--extra-cflags
指定zlib
和alsa-lib
的头文件路径--extra-ldflags
指定zlib
和alsa-lib
的库文件路径
配置完成后,找到生成的config.mak
文件,找到INSTALLSTRIP = -s
这一行,取消掉后面 的-s
,否则make install
命令会失败
配置后会生成Makefile
,然后执行make
跟make install
最后将tools
下的bin
文件夹内的mplayer
拷贝到板子的/bin
目录下
mplayer工具使用
前提是音频驱动跟屏幕驱动已经加载了
mplayer播放音频
前面提到aplay
无法播放mp3
,这个遗憾就由mplayer
来解决
mplayer播放视频
同样的命令mplayer test.mp4,可以看到屏幕上播放着视频,但是主要视频的分辨率要适配你的屏幕。