alsa开源库介绍

来源:互联网 发布:linux vi创建文件 编辑:程序博客网 时间:2024/06/06 04:23

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


0 0
原创粉丝点击