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.    
 

設置了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.    
 

 

設置了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.    
 

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.    
 

用來讀入/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.    
 

然後調用 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.    
 

通過語音通道播放聲音的調用的方式: 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章