日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ALSA編程指南

 renhl252 2015-01-04

 硬件概覽 ?

計(jì)算機(jī)中聲卡的設(shè)計(jì)幾乎從來(lái)沒(méi)有過(guò)統(tǒng)一標(biāo)準(zhǔn),所以,聲卡的自身的設(shè)計(jì)本身是變化多端的。但是,通常常見(jiàn)的聲卡都可以抽象出幾個(gè)部分:

  • 輸入設(shè)備:比如麥克風(fēng)(模擬/電子),從其他音響設(shè)備結(jié)果來(lái)的LINE IN;
  • ADC:模擬信號(hào)到數(shù)字信號(hào)轉(zhuǎn)換器;聲卡可以處理的信號(hào)是數(shù)字信號(hào),當(dāng)有輸入進(jìn)入聲卡時(shí),輸入通常是模擬信號(hào),比如傳統(tǒng)的麥克風(fēng)給出的信號(hào)就是模擬信號(hào),這是就需要ADC將模擬信號(hào)轉(zhuǎn)換成聲音信號(hào);
  • 信號(hào)處理和控制核心:這部分是聲卡的核心,一般由一個(gè)或者多個(gè)codec實(shí)現(xiàn);
  • DAC:數(shù)字信號(hào)到模擬信號(hào)的轉(zhuǎn)換器;它的功能就是將處理好的數(shù)字信號(hào)轉(zhuǎn)化成模擬信號(hào);
  • MIXER:俗稱混音器;這個(gè)設(shè)備主要的功能是將不同輸入來(lái)源的聲音信號(hào)混合起來(lái)并且轉(zhuǎn)發(fā)到不同的輸出設(shè)備上去;比如,想象一下一邊聽(tīng)音樂(lè)一邊音頻聊天的情景,混音器需要將從麥克風(fēng)過(guò)來(lái)的語(yǔ)音內(nèi)容和播放器傳說(shuō)過(guò)來(lái)的音樂(lè)混合起來(lái)轉(zhuǎn)發(fā)到耳機(jī)上;而當(dāng)耳機(jī)拔出脫離聲卡時(shí),混音器需要將聲音信號(hào)轉(zhuǎn)發(fā)的計(jì)算機(jī)的喇叭上去;等等;
  • 輸出設(shè)備:喇叭,LINE OUT和麥克風(fēng)都是輸出設(shè)備;放大器也可以被看作輸出設(shè)備,通常放大器不需要軟件控制,也就是不需要有驅(qū)動(dòng)程序就可以動(dòng)作;放大器的主要功能就是將聲音信號(hào)放大,增加響度等等。

Audio Interface ?

Audio Interface主要是指可以將聲音數(shù)據(jù)從計(jì)算機(jī)中傳入傳出的接口。常見(jiàn)的Audio Interface有I2S和AC97兩種。其中,I2S多用與嵌入式設(shè)備上的聲音數(shù)據(jù)傳輸,而AC97接口則多見(jiàn)于傳統(tǒng)PC。這兩種接口有什么不同呢?這里暫且擱置不談。對(duì)聲音程序的開(kāi)發(fā)者來(lái)說(shuō),跟重要的是理解Audio Inferface的概念而非細(xì)節(jié)。細(xì)節(jié)就留給硬件工程師和驅(qū)動(dòng)開(kāi)發(fā)者吧。

在計(jì)算機(jī)內(nèi)部,聲音被表示成為字節(jié)流(stream bit),與其他類型的數(shù)據(jù)并沒(méi)有差異。而在計(jì)算機(jī)的外部世界,通常,聲音可以被表示成為數(shù)字形式(一個(gè)或這多個(gè)字節(jié)流)或者模擬形式(按照時(shí)間表示的電壓變化)。Audio Interface的主要任務(wù)就是將計(jì)算機(jī)內(nèi)部外部世界的不同數(shù)據(jù)類型進(jìn)行轉(zhuǎn)化。Audio Inferface的構(gòu)成當(dāng)然和它的功能有著必然的聯(lián)系。當(dāng)聲音通過(guò)Audio Inferface傳入計(jì)算機(jī)內(nèi)部時(shí),經(jīng)過(guò)轉(zhuǎn)化的數(shù)據(jù)(字節(jié))將被暫時(shí)存儲(chǔ)在一個(gè)硬件上的緩沖區(qū)中,當(dāng)緩沖區(qū)已滿,Audio Interface就會(huì)觸發(fā)一個(gè)中斷,要求CPU協(xié)調(diào)將數(shù)據(jù)從緩沖區(qū)移動(dòng)到適當(dāng)?shù)牡胤饺?,通常,這種數(shù)據(jù)移動(dòng)都是以DMA的方式進(jìn)行,而且,通常數(shù)據(jù)移動(dòng)的目的地就是主存。

                 +---------------------------------+
                 |Audio         +----------------+ |
Audio Signal ----|Interface-----+ HW BUFFER      | |
                 |              +----------------+ |
                 +---------------------------------+

將數(shù)據(jù)從計(jì)算機(jī)傳出的過(guò)程于此類似,只是方向正好相反,中斷觸發(fā)的時(shí)機(jī)也不同。Audio Interface會(huì)在硬件緩沖區(qū)被搬走后清空的情況下觸發(fā)終端,要求CPU協(xié)調(diào)傳送新的數(shù)據(jù)進(jìn)入緩沖區(qū)。

從上面的描述就可以看出,Audio Interface有幾個(gè)要素需要開(kāi)發(fā)者注意。

  • 數(shù)據(jù)轉(zhuǎn)換的格式;
  • 數(shù)據(jù)轉(zhuǎn)換的速率;
  • 需要多少數(shù)據(jù)/空閑空間來(lái)觸發(fā)中斷;
  • 硬件緩沖區(qū)的大??;

以上要素中,前兩個(gè)決定了聲音信號(hào)/數(shù)據(jù)的質(zhì)量,而后兩者決定了“延遲”。一般延遲有“輸入延遲”和“輸出延遲”兩種。輸入延遲指的是數(shù)據(jù)開(kāi)始傳輸進(jìn)入硬件緩沖區(qū)的時(shí)刻和CPU得到完成數(shù)據(jù)移動(dòng)的那個(gè)時(shí)刻之間的時(shí)間差;輸出延遲與次類似,方向相反。

ALSA是什么? ?

ALSA是Advanced Linux Sound Architecture的縮寫?;卮鹜戤?。

這樣答未免太無(wú)聊了,但畢竟有了一個(gè)給傻瓜寫的教科書(shū)一樣開(kāi)頭。ALSA是為L(zhǎng)inux并且不限于Linux操作系統(tǒng)而設(shè)計(jì)的一套軟件棧,它為聲音相關(guān)的硬件提供了硬件抽象;應(yīng)用程序可以通過(guò)一個(gè)統(tǒng)一的接口操作聲卡的硬件而不需要關(guān)系具體的細(xì)節(jié);

ALSA程序的結(jié)構(gòu) ?

ALSA程序的結(jié)構(gòu)非常簡(jiǎn)單。

open_the_device(); /* 打開(kāi)聲音輸入/輸出設(shè)備 */
set_the_parameters_of_the_device(); /* 設(shè)置該設(shè)備的參數(shù),最終要的就是前文提到的四個(gè)參數(shù) */
while(!done) {
  /* one or both of these */
  receive_audio_data_from_the_dev(); /* 從設(shè)備接收數(shù)據(jù) */
  deliver_audio_data_to_the_dev(); /* 向設(shè)備發(fā)送數(shù)據(jù) */
}
close_the_device(); /* 關(guān)閉聲音輸入輸出設(shè)備 */

與ALSA相關(guān)的資源 ?

  • ALSA項(xiàng)目的主頁(yè)

http://www./main/index.php/Main_Page

這里是ALSA相關(guān)的所有內(nèi)容的源頭,包括代碼和文檔,如果想要弄懂聲音如何在Linux中工作,狠狠扎進(jìn)這一堆財(cái)富里面吧!

  • Documentation/sound/alsa/*

內(nèi)核源碼中的文檔也是相當(dāng)?shù)难院?jiǎn)意賅,這里要著重推薦。其中,推于嵌入式設(shè)備或者Android開(kāi)發(fā)者來(lái)說(shuō),soc目錄中的文檔堪稱字字珠璣。ASoC主要是由Wolfson公司的開(kāi)發(fā)人員推動(dòng)和撰寫的,這幾個(gè)文檔詳細(xì)講述了如何開(kāi)發(fā)ASoC驅(qū)動(dòng)的幾乎所有內(nèi)容。

這是用doxygen從代碼注釋中產(chǎn)生的ALSA用戶空間庫(kù)文檔,相當(dāng)?shù)南鑼?shí),建議加入收藏夾中。

ALSA的體系結(jié)構(gòu) ?

http://image80.360doc.com/DownloadImg/2015/01/0419/48737647_1.gif

上圖之中,Control和PCM部分是理解ALSA如何工作的關(guān)鍵。

PCM ?

PCM是最常見(jiàn)的數(shù)字音頻信號(hào)形式之一,ALSA驅(qū)動(dòng)提供了一些對(duì)PCM進(jìn)行操作和配置的接口函數(shù);雖然PCM可以廣泛用于音頻信號(hào)傳輸以外的很多應(yīng)用上,在編寫ALSA驅(qū)動(dòng)和應(yīng)用時(shí),可以簡(jiǎn)單的認(rèn)為它就是依時(shí)間軸上不斷變化的聲音的樣本;

比如,下面這個(gè)典型的聲音信號(hào),

http://image80.360doc.com/DownloadImg/2015/01/0419/48737647_2.gif

轉(zhuǎn)化成PCM之后變成了這樣:

http://image80.360doc.com/DownloadImg/2015/01/0419/48737647_3.gif

很顯然,PCM上聲音的質(zhì)量取決于兩個(gè)方面,

  • 第一就是采樣的密度,也就是時(shí)間軸上的間隔;時(shí)間間隔越小,聲音的質(zhì)量越好;
  • 第二就是它可以表示的電壓的粒度;電壓級(jí)別劃分越細(xì)致,聲音的質(zhì)量越好;

Control接口 ?

Control是ALSA為用戶空間應(yīng)用程序提供的控制聲卡的頻頻路徑(輸入輸出重定向),音量大小,輸入輸出設(shè)備選擇和配置的接口。ALSA控制接口可以控制的兩類主要元素是聲音的路徑和音量的大??;其中,在嵌入式設(shè)備上,聲音的路徑控制是通過(guò)驅(qū)動(dòng)程序提供的DAPM接口實(shí)現(xiàn)的;而音量控制,是通過(guò)接口控制MIXER做到的。

ALSA用戶空間C庫(kù)概覽 ?

http://www./alsa-doc/alsa-lib/index.html

PCM操作相關(guān) ?

http://www./alsa-doc/alsa-lib/pcm.html

Audio Clips ?

Audio sample rate conversion (SRC) or audio resampling is the process of changing the audio sample rate without affecting the quality. Broadcast audio infrastructure equipment typically requires 48-kHz synchronous sampling rate audio signals. However, the audio inputs to the audio equipment can be from sources with different sampling rates. For example, CD audio signals have a sampling rate of 44.1 kHz, while other audio sources have sampling rates from 32 kHz to 192 kHz.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多