理解和使用Alsa的配置文件 作者:劉旭暉 Raymond轉(zhuǎn)載請(qǐng)注明出處 Email:colorant@163.com BLOG:http://blog.csdn.net/colorant/ 主頁(yè):http://rgbbones.googlepages.com/
最近在做音頻相關(guān)的驅(qū)動(dòng),使用到了Alsa。過程中涉及到一些硬件的設(shè)置和測(cè)試,需要了解Alsa的配置文件的寫法,稍微學(xué)習(xí)了一下,這里把自己的一些簡(jiǎn)單理解記錄如下。
1 相關(guān)說明 1.1 網(wǎng)站資源 Alsa項(xiàng)目的官方網(wǎng)址: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
實(shí)際上,如果你仔細(xì)看了上述文檔,大概也就沒必要往下看我的文章了 8 )
另:關(guān)于Alsa-Lib的API,網(wǎng)上的是每天自動(dòng)生成的最新版本的API,如果你不能確認(rèn)你使用的版本是否和最新版本完全兼容,可以看Alsa-lib包里自帶的那一份文檔??梢栽趕rc包里執(zhí)行make doc 自己build出來。 1.2 工作環(huán)境 我測(cè)試的軟件版本是基于Alsa 1.0.14的版本,當(dāng)前最新的版本是1.0.16 (2008-7),不過配置文件這一部分應(yīng)該是差不多的,至少?gòu)奈臋n上來看是這樣。
2 理解配置文件 2.1 配置文件的位置 配置文件的位置是由Configure階段的選項(xiàng)來決定的,不過多數(shù)時(shí)候,Alsa的配置文件位于:/usr/share/alsa目錄下,主要配置文件為/usr/share/alsa/alsa.conf 其它文件是否需要,位置在哪,都是由alsa.conf來決定的。 通常會(huì)有/usr/share/alsa/card 和/usr/share/alsa/pcm兩個(gè)子目錄,用于設(shè)置Card相關(guān)的參數(shù),別名以及一些PCM默認(rèn)設(shè)置。 此外,在alsa.conf中,通常還會(huì)引用 /etc/asound.conf 和 ~/.asoundrc這兩個(gè)配置文件,這兩個(gè)文件通常是放置你個(gè)人需要特殊設(shè)置的相關(guān)參數(shù)。按照Alsa官方文檔的說法,1.0.9版本以后,這兩個(gè)文件就不再是必要的,甚至是不應(yīng)該需要的。至少是不推薦使用吧。不過,對(duì)于我來說,在嵌入式系統(tǒng)中使用,為了簡(jiǎn)單和方便測(cè)試,恰恰是需要修改這兩個(gè)文件 8 ) 2.2 Alsa.conf Alsa.conf中主要的一些內(nèi)容包括:用hook讀取了/etc/asound.conf 和 ~/.asoundrc這兩個(gè)配置文件: @hooks [ { func load files [ "/etc/asound.conf" "~/.asoundrc" ] errors false } ]
設(shè)置了default pcm的一些默認(rèn)參數(shù),如,默認(rèn)使用Card 0 ,Device 0作為音頻設(shè)備等等。
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 。。。
設(shè)置了Alsa 內(nèi)置的一些plugin的接口參數(shù),例如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數(shù)據(jù)流存儲(chǔ)到文件中。
此外,通常alsa.conf還會(huì)載入cards/aliases.conf ,設(shè)置一些聲卡的別名等,這個(gè)我是不需要了。 在aliases.conf 的結(jié)尾還有以下一段:
<confdir:pcm/default.conf> <confdir:pcm/dmix.conf> <confdir:pcm/dsnoop.conf>
用來讀入/usr/share/alsa/pcm目錄下所列的那3個(gè)文件 分別設(shè)置 默認(rèn)PCM設(shè)備的相關(guān)參數(shù),dmix是用來實(shí)現(xiàn)播放時(shí)軟件混音的內(nèi)建plugin,dsnoop則是用來實(shí)現(xiàn)錄音時(shí)多路分發(fā)的內(nèi)建plugin。
3 一些配置和使用實(shí)例
3.1 使用藍(lán)牙設(shè)備 在/etc/asound.conf中添加下列一項(xiàng)用來使用藍(lán)牙的A2DP設(shè)備
# device for bluetooth pcm.bluetooth{ type bluetooth device 00:02:5B:00:C1:A0 }
然后調(diào)用 aplay –D bluetooth sample.wav 播放。
需要注意,為了使用該設(shè)備,你需要 /usr/lib/alsa-lib/libasound_module_pcm_bluetooth.so 這一個(gè)藍(lán)牙plugin的庫(kù)文件。這是在Bluez相關(guān)的包里,和Alsa本身沒有關(guān)系。從這里,我們也可以看出alsa的外部plugin和配置文件之間的名字關(guān)系規(guī)則: libasound_module_pcm_####.so 這里的#### 就是你再conf文件中pcm.xxxx 里所寫的名字。
3.2 使用非默認(rèn)的聲卡設(shè)備通道 在我的板子上,Buildin的Audio硬件在Alsa子系統(tǒng)中實(shí)現(xiàn)了兩個(gè)硬件通道,一個(gè)是HIFI通道,另一個(gè)是語音通道,所以我添加了如下配置:
#device for voice channel pcm.voice{ type plug slave{ pcm "hw:0,1" } }
通過語音通道播放聲音的調(diào)用的方式: aplay –D voice sample.wav
這樣的寫法說明我通過plug這plugin對(duì)音頻數(shù)據(jù)進(jìn)行自動(dòng)的采樣率,通道等調(diào)整后,將數(shù)據(jù)送到我的第0個(gè)card的序號(hào)為1的device上。 實(shí)際上,如果不寫上述配置文件,用 aplay -D "plug:SLAVE='hw:0,1'" sample.wav 也可以得到同樣的結(jié)果。
Hifi通道播放聲音直接使用 Aplay sample.wav即可 也就是Aplay –D default sample.wav
3.3 其它 混音: aplay -D plug:dmix sample.wav & 你可以通過多次調(diào)用上述命令來測(cè)試多個(gè)音頻數(shù)據(jù)的混音。
Dump音頻數(shù)據(jù): aplay -D "plug:'file:FILE=/tmp/dump.bin'" sample.wav
|