ALSA
- ALSA下载
- alsa-lib 交叉编译
- alsa-utils 交叉编译
- alsa.conf
- amixer
- amixer controls
- amixer contents
- 设置声卡
- 获取声卡设置值
- 使用 amixer 设置声卡
- 使用 aplay 播放 WAV 格式音乐
- 使用 arecord 录制音频
ALSA下载
下载alsa-lib 和 alsa-utils
alsa下载地址
alsa-lib api文档地址
alsa-lib 交叉编译
意 alsa-lib 编译过程中会生成一些配置文件,而这些配置信息的路径都是绝对路径,因此
为了保证 ubuntu 和开发板根文件系统中的路径一致!我们需要在 ubuntu 和开发板中各创建一
个路径和名字完全一样的目录,这里我们都创建一个/usr/share/arm-alsa 目录, ubuntu 中创建命
令如下:
cd /usr/share //进入 ubuntu 的/usr/share 目录
sudo mkdir arm-alsa //创建 arm-alsa 目录
- tar -vxjf alsa-lib-1.2.2.tar.bz2 //解压 alsa-lib
- cd alsa-lib-1.2.2/ //进入 alsa-lib 源码目录
- ./configure --host=arm-linux-gnueabihf --prefix=$(pwd)/_install --with-configdir=/usr/share/arm-alsa
注意, “–with-configdir”用于设置 alsa-lib 编译出来的配置文件存放位置,这里设置为前
面创建的“/usr/share/arm-alsa”目录。 - make //编译
- sudo make install //安装
提示 libatopology.la 编译失败, 这是因为 sudo 会切换到 root 用户下,但是此
时 root 用户下的环境变量中没有交叉编译器路径,因此会提示找不到“arm-linux-gnueabihf-gcc”,
从而导致 libatopology.la 编译失败。解决方法就是先切换到 root 用户,重新执行一下/etc/profile
文件,然后直接 make install 即可,命令如下:
sudo -s //切换到 root 用户
source /etc/profile //执行/etc/profile
make install //安装,此时已经工作在 root 下,因此不需要加“sudo”
su zuozhongkai //编译完成以后回原来的用户
alsa-utils 交叉编译
- tar -vxjf alsa-utils-1.2.2.tar.bz2 //解压
- cd alsa-utils-1.2.2/ //进入
- ./configure --host=arm-linux-gnueabihf --prefix= ( p w d ) / i n s t a l l − − w i t h − a l s a − i n c − p r e f i x = (pwd)/_install --with-alsa-inc-prefix= (pwd)/install−−with−alsa−inc−prefix=HOME/alsa-lib/include/ --with-alsaprefix=$HOME/alsa-lib/lib/ --disable-alsamixer --disable-xmlto
- make //编译
- sudo make install
上面在配置 alsa-utils 的时候使用了“–disable-alsamixer”来禁止编译 alsamixer 这个
工具,但是这个工具确非常重要,它是一个图形化的声卡控制工具,需要 ncurses 库的支持。
ncurses 库笔者已经交叉编译成功了(参考 63.5 小节),但是尝试了很多次设置,就是无法编译
alsa-utils 中的 alsamixer 工具。网上也没有找到有效的解决方法,大家都是禁止编译 alsamixer
的。 所以这里就没法使用 alsamixer 这个工具了,但是可以使用 alsa-utils 提供的另外一个工具:
amixer, alsamixer 其实就是 amixer 的图形化版本。两者的功能都是一样的,只是 alsamixer 使用
起来更人性化一点。
alsa.conf
打开开发板根文件系统中的/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(简单)组,这一组命令是简化版,本教程最终使用“s”开头的命令设置声卡,
因为少输入很多字符
amixer controls
numid=3,iface=MIXER,name=‘Master ModeSwitch’
numid=29,iface=MIXER,name=‘Master Mux’
numid=4,iface=MIXER,name=‘Master Quality Switch’
numid=2,iface=MIXER,name=‘Master Switch’
numid=1,iface=MIXER,name=‘Master Volume’
numid=7,iface=MIXER,name=‘PCM Mode Switch’
numid=6,iface=MIXER,name=‘PCM Switch’
numid=5,iface=MIXER,name=‘PCM Volume’
numid=21,iface=MIXER,name=‘Line Input Switch’
numid=16,iface=MIXER,name=‘Line Mode Switch’
numid=27,iface=MIXER,name=‘Line Mux’
。。。。。
numid=9,iface=MIXER,name=‘Mic Switch’
numid=8,iface=MIXER,name=‘Mic Volume’
numid=19,iface=MIXER,name=‘ADC Mode Switch’
numid=28,iface=MIXER,name=‘ADC Mux’
amixer contents
numid=3,iface=MIXER,name=‘Master Mode Switch’
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 ‘Common Buffer Off’
; Item #1 ‘Common Buffer On’
: values=0
numid=5,iface=MIXER,name=‘PCMVolume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0
numid=24,iface=MIXER,name=‘Mixer ADC Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=26,iface=MIXER,name=‘Mixer DAC Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=25,iface=MIXER,name=‘Mixer Line Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=23,iface=MIXER,name=‘Mixer Mic Mix Switch’
; type=BOOLEAN,access=rw------,values=1
: values=on
设置声卡
知道了设置项和设置值,那么设置声卡就很简单了,直接使用下面命令即可:
amixer sset 设置项目 设置值
或:
amixer cset 设置项目 设置值
获取声卡设置值
如果要读取当前声卡某项设置值的话使用如下命令:
amixer sget 设置项目
amixer sget ‘Master Mux’
或:
amixer cget 设置项目
amixer cget numid=5,iface=MIXER,name=‘PCMVolume’
使用 amixer 设置声卡
第一次使用声卡之前一定要先使用 amixer 设置声卡,打开耳机和喇叭,并且设置喇叭和耳
机音量,输入如下命令:
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 格式音乐
声卡设置好以后就可以使用 aplay 软件播放 wav 格式的音乐测试一下, aplay 也是 alsa-utils
提供的。可以在开发板根文件系统下创建一个名为“music”的目录来存放音频文件,然后找一
首 wav 格式的音乐放到开发板根文件系统中,然后输入如下命令播放:
aplay test.wav //播放歌曲
如果一切设置正常的话就会开始播放音乐,因为 ALPHA 开发板支持喇叭和耳机自动切换,
因此如果不插耳机的话默认从喇叭播放音乐。插上耳机以后喇叭就会停止播放音乐,改为耳机
播放音乐
使用 arecord 录制音频
使用 arecord 来录制一段 10 秒中的音频, arecord 也是 alsa-utils 编译出来的,输入如下命
令:
arecord -f cd -d 10 record.wav
-f 是设置录音质量,“-f cd”表示录音质量为 cd 级别。 -d 是指定录音时间,单位是 s,这
条指令就是录制一段 cd 级别 10s 的 wav 音频,音频名字为 record.wav。录制的时候大家就可
以对着开发板上的 MIC 说话,直到录制完成。
Headphone:耳机输出
Headphone Playback ZC:耳机回放开关
Speaker Playback ZC:扬声器回放开关
Speaker AC:扬声器交流音量
Speaker DC:扬声器直流音量
Left Output Mixer PCM:左声道混合器输出PCM
Left Input Mixer Boost:左声道混合器增强
Left Boost Mixer LINPUT1:左声道混合器输入1