天天看點

了解和使用Alsa的配置檔案

  了解和使用 Alsa 的配置檔案 作者:劉旭晖 Raymond轉載請注明出處 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這兩個配置檔案: @hooks [                                                    {                                                                func load                                            files [                                                                 "/etc/asound.conf"                             "~/.asoundrc"                        ]                                        errors false                               }                                             ]   設定了default pcm的一些預設參數,如,預設使用Card 0 ,Device 0作為音頻裝置等等。   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: 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 的結尾還有以下一段:   <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裝置   # 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通道,另一個是語音通道,是以我添加了如下配置:   #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