Alsa介绍
1.Alsa 的原理;
2.Alsa的架构;
3.Alsa移植;
4.Alsa编程的注意的问题;
1.什么是alsa
Alsa( Advanced Linux Sound Architecture )是linux下的声卡驱动,它提供
了linux硬件的驱动,同时还提供了应用
录制或者播放的api函数,可以在不考虑底层硬件的基础上实现对声音的采
集或者播放;alsa也提供了完整的工具,可以实现对声卡的设置和一些录
音播放的功能。
Alsa结构
四、设备打开过程和数据流程
ALSA设备文件结构:
/dev/snd
crw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0
crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0
crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0c
crw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0p
crw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1p
crw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seq
crw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer
controlC0 :用于声卡的控制,如麦克风的控制或者混音的控制;
pcmC0D0c:用于录音的pcm设备;
pcmC0D0p:用于播放的pcm设备;
Seq: 音序器;
Timer:定时器;
机顶盒和虚拟机如何使用alsa:
1.首先要确保kernel支持alsa,在kernel编译中打开相应的选项:
2.编译alsa-lib----alsa的api函数在这里集成
./configure --host=mipsel-linux --prefix=/home/cxc/bcm_std/7581STD_5.5/ipphone/install --with-alsa-devdir=/dev --with-configdir=/usr/share/alsa --enable-static --enable-shared --disable-python --with-configdir=/usr/local/share/alsa --with-plugindir=/usr/local/lib/alsa_lib
Prefix : 安装的目录; with-alsa-devdir : 配置文件安装目录;
with-plugindir: alsa的插件安装的目录
host:交叉编译工具
音频的一些概念:
样本长度(sample):样本是记录音频数据最基本的单位,常见的有8位和16位。
通道数(channel):该参数为1表示单声道,2则是立体声。
桢(frame):桢记录了一个声音单元,其长度为样本长度与通道数的乘积。
采样率(rate):每秒钟采样次数。
周期(period):音频设备一次处理所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。
交错模式(interleaved):是一种音频数据的记录方式,在交错模式下,数据以连续桢的形式存放,即首先记录完桢1的左声道样本和右声道样本(假设为立体声格式),再开始桢2的记录。而在非交错模式下,首先记录的是一个周期内所有桢的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,我们只需要使用交错模式就可以了。
Alsa的使用:
1.alsa-util的编译 :alsa相应的工具
在编译alsa工具的时候,需要用到编译alsa-lib生成的库,和头文件。需要指
定刚才编译alsalib的安装目录,和头文件生成的目录;
编译后在install目录下的bin文件中生成相应的可执行工具:
如:alsamixer aplay arecord
./configure --host=mipsel-linux --prefix=/home/cxc/bcm_std/7581STD_5.5/ipphone/install CPPFLAGS=-I/home/cxc/bcm_std/7581STD_5.5/ipphone/install/include LDFLAGS=-L/home/cxc/bcm_std/7581STD_5.5/ipphone/install/lib --disable-alsamixer --disable-xmlto --disable-nls
Alsa的配置文件:
snd_pcm_sw_params_set_stop_threshold
这个是对用户空间中过的一些参数的设置,比如要设置当缓存多少数据后开
始启动声卡来进行播放或者录制;
snd_pcm_hw_params_set_period_time_near
是对硬件的一些设置,比如采样率等的设置
数据都是从硬件的buufer到用户的buffer一层层拷贝上来的,如果拷贝的不及
时,就可能造成底层的数据的上溢或者下溢。
Alsa的使用:
snd_pcm_sw_params_set_stop_threshold
这个是对用户空间中过的一些参数的设置,比如要设置当缓存多少数据后开
始启动声卡来进行播放或者录制;
snd_pcm_hw_params_set_period_time_near
是对硬件的一些设置,比如采样率等的设置
数据都是从硬件的buufer到用户的buffer一层层拷贝上来的,如果拷贝的不及
时,就可能造成底层的数据的上溢或者下溢。
Alsa的工具的使用:
Aplay :播放
aplay –D hw:0,0 -f S16_LE –r 44100 –c 2 tmp.pcm
Arecord:录制
arecord –D hw:0,0 -f S16_LE –r 44100 –c 2 tmp.pcm
speaker-test:声卡的测试工具
speaker-test -Dplug:front -c2
Amixer :声卡的设置工具
amixer -c 1 set Line,0 80%,40% unmute cap