alsa分析:alsa的那些配置文件 ( 2 )

http://blog.csdn.net/doom66151/article/details/6577955

 

关于ALsa的配置文件,这里有一篇很好的文章。

感谢原著。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

理解和使用Alsa的配置文件

作者:刘旭晖 Raymond转载请注明出处 http://blog.csdn.net/colorant/archive/2008/06/30/2598815.aspx

 

Email:[email protected]

BLOG:http://blog.csdn.net/colorant/

主页:http://rgbbones.googlepages.com/

 

最近在做音频相关的驱动,使用到了Alsa。过程中涉及到一些硬件的设置和测试,需要了解Alsa的配置文件的写法,稍微学习了一下,这里把自己的一些简单理解记录如下。

 

1 相关说明

1.1 网站资源

Alsa项目的官方网址:http://www.alsa-project.org/

Alsa LIB API Reference:http://www.alsa-project.org/alsa-doc/alsa-lib/

配置文件的语法:http://www.alsa-project.org/alsa-doc/alsa-lib/conf.html

Asoundrc的官方说明文档:http://www.alsa-project.org/main/index.php/Asoundrc

 

实际上,如果你仔细看了上述文档,大概也就没必要往下看我的文章了 8 )

 

另:关于Alsa-Lib的API,网上的是每天自动生成的最新版本的API,如果你不能确认你使用的版本是否和最新版本完全兼容,可以看Alsa-lib包里自带的那一份文档。可以在src包里执行make doc 自己build出来。

1.2 工作环境

我测试的软件版本是基于Alsa 1.0.14的版本,当前最新的版本是1.0.16 (2008-7),不过配置文件这一部分应该是差不多的,至少从文档上来看是这样。

 

2 理解配置文件

2.1 配置文件的位置

配置文件的位置是由Configure阶段的选项来决定的,不过多数时候,Alsa的配置文件位于:/usr/share/alsa目录下,主要配置文件为/usr/share/alsa/alsa.conf 其它文件是否需要,位置在哪,都是由alsa.conf来决定的。

通常会有/usr/share/alsa/card 和/usr/share/alsa/pcm两个子目录,用于设置Card相关的参数,别名以及一些PCM默认设置。

此外,在alsa.conf中,通常还会引用 /etc/asound.conf 和 ~/.asoundrc这两个配置文件,这两个文件通常是放置你个人需要特殊设置的相关参数。按照Alsa官方文档的说法,1.0.9版本以后,这两个文件就不再是必要的,甚至是不应该需要的。至少是不推荐使用吧。不过,对于我来说,在嵌入式系统中使用,为了简单和方便测试,恰恰是需要修改这两个文件 8 )

2.2        Alsa.conf

Alsa.conf中主要的一些内容包括:用hook读取了/etc/asound.conf 和 ~/.asoundrc这两个配置文件:

  1. @hooks [                                            
  2.         {                                                 
  3.                 func load                             
  4.                 files [                                          
  5.                         "/etc/asound.conf"      
  6.                         "~/.asoundrc"         
  7.                 ]                         
  8.                 errors false                        
  9.         }                                              
  10. ]  
  11.    
@hooks [ { func load files [ "/etc/asound.conf" "~/.asoundrc" ] errors false } ]  

设置了default pcm的一些默认参数,如,默认使用Card 0 ,Device 0作为音频设备等等。

  1.    
  2. defaults.ctl.card 0       
  3. defaults.pcm.card 0       
  4. defaults.pcm.device 0   
  5. defaults.pcm.subdevice -1                  
  6. defaults.pcm.nonblock 1                 
  7. defaults.pcm.ipc_key 5678293  
  8. 。。。  
  9.    
defaults.ctl.card 0 defaults.pcm.card 0 defaults.pcm.device 0 defaults.pcm.subdevice -1 defaults.pcm.nonblock 1 defaults.pcm.ipc_key 5678293 。。。  

 

设置了Alsa 内置的一些plugin的接口参数,例如file:

  1. pcm.file {  
  2.         @args [ FILE FORMAT ]  
  3.         @args.FILE {  
  4.                 type string  
  5.         }  
  6.         @args.FORMAT {  
  7.                 type string  
  8.                 default raw  
  9.         }  
  10.         type file  
  11.         slave.pcm null  
  12.         file $FILE  
  13.         format $FORMAT  
  14. }  
  15.    
pcm.file { @args [ FILE FORMAT ] @args.FILE { type string } @args.FORMAT { type string default raw } type file slave.pcm null file $FILE format $FORMAT }  

File plugin的作用是将PCM数据流存储到文件中。

 

此外,通常alsa.conf还会载入cards/aliases.conf ,设置一些声卡的别名等,这个我是不需要了。

在aliases.conf 的结尾还有以下一段:

  1.    
  2. <confdir:pcm/default.conf>  
  3. <confdir:pcm/dmix.conf>  
  4. <confdir:pcm/dsnoop.conf>  
  5.    
<confdir:pcm/default.conf> <confdir:pcm/dmix.conf> <confdir:pcm/dsnoop.conf>  

用来读入/usr/share/alsa/pcm目录下所列的那3个文件

分别设置 默认PCM设备的相关参数,dmix是用来实现播放时软件混音的内建plugin,dsnoop则是用来实现录音时多路分发的内建plugin。

 

3  一些配置和使用实例 

3.1 使用蓝牙设备

在/etc/asound.conf中添加下列一项用来使用蓝牙的A2DP设备

  1.    
  2. # device for bluetooth   
  3. pcm.bluetooth{  
  4.         type bluetooth  
  5.         device 00:02:5B:00:C1:A0  
  6. }  
  7.    
# device for bluetooth pcm.bluetooth{ type bluetooth device 00:02:5B:00:C1:A0 }  

然后调用 aplay –D bluetooth sample.wav 播放。

 

需要注意,为了使用该设备,你需要 /usr/lib/alsa-lib/libasound_module_pcm_bluetooth.so 这一个蓝牙plugin的库文件。这是在Bluez相关的包里,和Alsa本身没有关系。从这里,我们也可以看出alsa的外部plugin和配置文件之间的名字关系规则: libasound_module_pcm_####.so 这里的#### 就是你再conf文件中pcm.xxxx 里所写的名字。

 

3.2 使用非默认的声卡设备通道

在我的板子上,Buildin的Audio硬件在Alsa子系统中实现了两个硬件通道,一个是HIFI通道,另一个是语音通道,所以我添加了如下配置:

  1.    
  2. #device for voice channel   
  3. pcm.voice{  
  4.         type plug  
  5.         slave{  
  6.                 pcm "hw:0,1"  
  7.         }  
  8. }  
  9.    
#device for voice channel pcm.voice{ type plug slave{ pcm "hw:0,1" } }  

通过语音通道播放声音的调用的方式: aplay –D voice sample.wav

 

这样的写法说明我通过plug这plugin对音频数据进行自动的采样率,通道等调整后,将数据送到我的第0个card的序号为1的device上。

实际上,如果不写上述配置文件,用 aplay -D "plug:SLAVE='hw:0,1'" sample.wav 也可以得到同样的结果。

 

Hifi通道播放声音直接使用 Aplay sample.wav即可 也就是Aplay –D default sample.wav

 

3.3 其它

混音:

aplay -D plug:dmix sample.wav &

你可以通过多次调用上述命令来测试多个音频数据的混音。

 

Dump音频数据:

aplay -D "plug:'file:FILE=/tmp/dump.bin'" sample.wav

你可能感兴趣的:(alsa分析:alsa的那些配置文件 ( 2 ))