ALSA asoundrc官方文檔

來源:互聯網
上載者:User

原文地址 http://www.alsa-project.org/main/index.php/Asoundrc


Why asoundrc?

.asoundrc和asound.conf對於ALSA能供正確工作不是必需的。大部分應用都可以在沒有他們的情況下正常運行。這兩個檔案用來提供特定的額外功能,比如在alsa-lig層進行路由和採樣率轉換。


The .asoundrc file

這個檔案為你提供更多對card/device的進階控制。.asoundrc檔案包含各種卡的定義,使得你可以在alsa-lib層訪問pcm plugins。允許你做很多神奇的事情:比如把多塊卡合為一塊,或者訪問多通道卡的多個I/Os


Where does asoundrc live?

asoundrc檔案一般存放在使用者home目錄下

~/.asoundrc

從下面這個檔案包含進來

/usr/share/alsa/alsa.conf

當然也可以使用對所有使用者生效的設定檔

/etc/asound.conf

當啟動一個alsa應用時,這兩個設定檔都會被載入。

下面是最基本的配置定義。


The default plugin

在目前使用者的home目錄下建立一個.asoundrc檔案

vi ~/.asoundrc

寫入如下內容,並儲存檔案

pcm.!default {    type hw    card 0}ctl.!default {    type hw    card 0}

關鍵詞default在ALSA lib API中定義為hw:0,0(預設音效卡的預設裝置)。標識 “!default”將覆蓋ALSA lib API中定義的default

現在你可以測試如下:

aplay -D default test.wav

The naming of PCM devices

一個典型的asoundrc以'PCM hw type'開始。這使得ALSA應用可以通過一個名字訪問虛擬音效卡裝置(plugin或者slave)。如果沒有它,那麼我們必須通過hw:0,0或者default這種形式來訪問soundcard(s)/device(s),如下

aplay -D hw:0,0 test.wav

關鍵字hw後面的兩個數字表示音效卡號和裝置號。

第一項通常從0開始。比如ALSA中pcm 裝置(物理I/O channels)的表示方法,從pcm0c(capture)和pcm0p(playback)開始

The Control device

一塊卡的控制裝置使得我們可以編程修改卡的各種控制。對於大部分卡都包括mixer(但是有些卡沒有mixer)。然而,他們仍然有其他的控制可能被像JACK這樣的程式訪問。比如digital I/O sync 指標,sample clock source switch 等等。

Aliases

使用”PCM hw type“ 還可以定義裝置別名。文法如下:

pcm.NAME {    type hw    card INT/STR    [device] INT    [subdevice] INT    mmap_emulation BOOL}

例如,下面給出第一個音效卡的別名

pcm.primary {    type hw    card 0    device 0}

現在你可以通過別名primary 訪問第一個音效卡。

aplay -D primary test.wav

Plugins

Q: 什麼是plugins

A: 在ALSA中,PCM plugins擴充了PCM裝置的功能和features。plugin可以自動的不可思議的執行工作,比如命名裝置,採樣率轉換,通道間的採樣複製,寫入檔案,聯合多個音效卡/裝置做多inputs/outputs。使用多通道音效卡/裝置以及其他功能等著你去發掘。使用這些plugins,你需要建立一個虛擬slave裝置。

plugins和選項的完整列表,參照alsa-lib documentation。下面是簡單介紹。

一個非常簡單的slave定義如下

pcm_slave.sltest {    pcm "hw:1,0"}

這裡定義了一個slave。這裡僅僅定義了你的聲音裝置的一個別名。稍微難以理解的是 'pcm types'參數必須定義在slave-definition-block。讓我們先設定一個rate-converter

pcm_slave.sl2 {    pcm "hw:0,0"    rate 48000}pcm.rate_convert {    type rate    slave sl2}

在play時將自動的轉換採樣率到44.1kHz。雖然這個功能並不是很實用,因為大部分players會轉換到音效卡支援的採樣轉換率,但是有時你可能想把採樣率轉換為較低的靜態採樣率。

為了方便,我們可以重寫未如下嵌套定義

pcm.rate_convert {    type rate    slave {        pcm "hw:0,0"        rate 48000    }}

使用pcm type plug 可以產生一個更複雜的轉換工具,文法如下

type plug                #format adjusted PCMslave STR                #slave name# orslave {    pcm STR              #dslave definition    #or    pcm {}               #slave pcm definition    [format STR]         #slave format    [channel INT]    [rate INT]}route policy STRttable {    CCHANNEL {        SCHANNEL REAL    }}

我們可以定義一個complex_convert如下:

pcm_slave.sl3 {    pcm "hw:0,0"    format S16_LE    channels 1    rate 16000}pcm.complex_convert {    type plug    slave sl3}

調用方是如下

aplay -vD complex_convert test.wav

在播放的時候你將轉換為採樣格式:S16_LE,1 channel和16kHz採樣。使用-v選項調用aplay可以顯示檔案的原始設定。

Software mixing

軟體混音可以在同一個裝置上同時播放多個音效檔。在linux環境中有很多方法可以執行軟體混音。通常需要一個server,比如ARTSD,ESD,JACK..等等,這個列表會很長因此應用經常困惑該使用哪一個

dmix

現在ALSA有了一個叫dmix(direct mixing)的本地plugin。它使得軟體混音變得非常簡單,不需要再為安裝或者卸載新應用而煩惱。

這個plugin有個非常有意思並且可能很有用的功能,它和default plugin名結合到一塊。理論上意味著所有的本地應用都共用聲音裝置。雖然實際上沒有多少applications會利用這個功能。

pcm.!default {    type plug    slave.pcm "dmixer"}pcm.dmixer {    type dmix    ipc_key 1024    slave {        pcm "hw:0,0"        period_time 0        period_size 1024        buffer_size 4096        rate 44100    }    bindings {        0 0        1 1    }}ctl.dmixer {    type hw    card 0}

試著播放如下:

aplay -f cd -D default test.

注意,dmix PCM name已經在全域設定檔/usr/share/alsa/alsa.conf中定義了

這個裝置預設的採樣率是48000Hz,可以用如下方式改變:

aplay -D "plug:'dmix:RATE=44100'" test.wav

dsnoop

dmix plugin是把多個輸出資料流混音到一起。如果你想要使用多個input,那麼使用dsnoop plugin

JACK plugin

VIrtual multi channel devices

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.