理解和使用alsa配置-默認靜音,必須先用amixer解除主音量和pcm音量的靜音



對於聲卡驅動程序,除了內核自帶的驅動程序之外,您還可以使用Advanced Linux Sound Architecture(ALSA,http://www.alsa-project.org/)提供的驅動程序。它支持一系列主流聲卡,同時它和內核 的聲音結構互相兼容,在某種程度上,可以說是內核的聲卡驅動模塊的補充。

ALSA的聲卡驅動程序的一般命名規則是snd-card-<soundcard>。soundcard代表不同類型的聲卡。例如,對於所有 的16位Soundblaster聲卡,它們對應的驅動程序模塊爲snd-card-sb16。

若與需要linux內核聲音驅動的向後兼容性,您還需要兩個模塊snd-pcm-oss和snd-mixer-oss。對於amixer設置的多個混音 器,它們都是針對不同的設備的。比如CD通道的設置是針對CD播放器的。而很多應用程序,如象mpg123,xmms,realplayer,都要依賴 PCM通道的設置。MIC代表麥克風。不同的Gain部分對於不同的使用能提供特別的增益。

缺省情況下ALSA靜音所有的輸出。爲了獲得聲音,必須解除主音量和PCM音量的靜音。

amixer -c 0 sset 'Master',0 100%,100% unmute
amixer -c 0 sset 'PCM ',0 100% unmute

選項包括mute,unmute,capture,nocapture,rec,norec,數字或left:right。amixer不帶參數運行時, 返回聲卡上所有通道的設置情況。

爲了在每次插入聲卡驅動模塊時,都打開靜音,您可以在/etc/modules.conf加入下列語句:

post-install snd-card-sb16 amixer -c 0 sset 'Master',0 100%,100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute

在成功插入了alsa聲卡模塊之後,系統會出現/proc/asound目錄,這個目錄描述了聲卡的工作情況,以及創建的設備文件。

在您加載snd-pcm-oss設備模塊之後,你也能使用與oss兼容的方式存取聲卡,這時如下的映射會被完成:

表 5-3

ALSA設備 OSS設備 次設備號
/dev/snd/pcmC0D0 /dev/audio0(/dev /audio) 4
/dev/snd/pcmC0D0 /dev /dsp0(/dev/dsp) 3
/dev/snd/pcmC0D1 /dev /adsp(/dev/adsp) 12
/dev/snd/pcmC1D0 /dev/audio1 20
/dev/snd/pcmC1D0 /dev/dsp1 19
/dev/snd/pcmC1D1 /dev/adsp1 28
/dev/snd/pcmC2D0 /dev/audio2 36
/dev/snd/pcmC2D0 /dev/dsp2 35
/dev/snd/pcmC2D1 /dev/adsp2 44

對於/dev/mixer設備,要加載snd-mixer-oss,可以保證和老的oss混音器的兼容性。如果您插入了上述設備之後,聲音系統仍無法正常 工作,您可以運行snddevices命令,建立正確的設備文件。

由於爲使ALSA正常工作,需要設置大量的設備別名,下面就給出一個/etc/modules.conf的例子,它能夠完成ESS Solo1聲卡的自動配置工作。其他的ALSA設備的設置也基本與此聲卡相同。

# 設置ALSA設備的主設備號,它固定爲116

alias char-major-116 snd

# 設置OSS設備的主設備號,它固定爲14,這使得ALSA複用OSS設備

alias char-major-14 soundcore

# ALSA設備別名

alias sound-card-0 snd-card-es1938

# OSS設備別名

alias sound-slot-0 sound-card-0

# 安裝不同的聲卡服務

alias sound-service-0-0 snd-mixer-oss
 alias sound-service-0-1 snd-seq-oss
 alias sound-service-0-3 snd-pcm-oss
 alias sound-service-0-8 snd-seq-oss
 alias snd-minor-oss-12 snd-pcm-oss

# 運行amixer命令,打開聲音輸出

post-install snd-card-es1938 amixer -c 0 sset 'Master',0 100%,100% unmute && amixer -c 0 sset 'PCM ',0 100% unmute

=================================================
http://www.linuxforum.net/forum/printthread.php?Cat=&Board=embedded&main=687530&type=post
理解和使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章