在Android中音頻系統使用的是ALSA系統架構。ASoC--ALSA System on Chip 。是建立在标準ALSA驅動層上,為了更好地支援
嵌入式處理器和移動裝置中的音頻Codec的一套軟體體系。在音頻裝置驅動中ASoC被分為Machine、Platform和Codec三大部分。
Codec部分:負責音頻解碼,這部分代碼全然無平台無關(裝置原廠提供),它包括了一些音頻的控件(Controls),音頻接
口,DAMP(動态音頻電源管理)的定義和Codec IO功能。為了保證硬體無關性,不論什麼特定于平台的代碼都要移
到Platform和Machine驅動中。
Platform部分:包括了平台的音頻DMA和音頻接口的配置和控制(I2S,PCM。AC97等);與處理器晶片相關的代碼。
Machine部分:是耦合Platform和Codec驅動,同一時候與上層互動的代碼。因為上層是标準的alsa架構。所下面層接口肯定要做了
統一,這部分由Machine本身的Platform驅動和Platform裝置組成(請跟上面的Platform驅動差别開)。Platform驅動
核心已經完畢了,是以無須過多的關心怎麼跟上層ALSA怎麼衍接的問題。我們僅僅須要注冊一個Machine的Platform
裝置以及完畢Platform和Codec耦合。
1、ALSA裝置檔案結構
controlC0 用于聲霸卡的控制,比如通道選擇,混音,麥克風的控制等;
pcmC0D0c 用于錄音的pcm裝置;
pcmC0D0p 用于播放的pcm裝置;
timer 定時器。
當中,C0D0代表的是聲霸卡0中的裝置0。pcmC0D0c最後一個c代表capture,pcmC0D0p最後一個p代表playback。這些都是
alsa-driver中的命名規則。
2、ALSA檔案檔案夾結構概述
sound/core:該檔案夾包括了中間層。ALSA的核心驅動。那些本地ALSA子產品保持在這個檔案夾裡。一些子檔案夾包括那些與核心配置
相關的不同的子產品。
sound/core/oss :關于PCM和mixer的OSS模拟的子產品儲存在這個檔案夾裡面。
sound/core/seq :有關音序器相關的代碼。
kernel /include/sound :ALSA驅動的公共頭檔案檔案夾,該檔案夾的頭檔案須要導出給使用者空間的應用程式使用。通常驅動子產品私
有的頭檔案不應放置在這裡。
sound/drivers :該檔案夾包括了在不同架構的系統中的不同驅動共享的檔案部分。與CPU、BUS架構無關的公用代碼。
sound/i2c :該檔案夾包括了ALSA自己的I2C控制代碼。
盡管Linux有個i2c的标準協定層。ALSA還是擁有它關于一些card的專用
i2c代碼。由于一些聲霸卡隻須要一些簡單的操作,而标準的i2c的API函數對此顯得太過複雜了。
sound/pci :該檔案夾檔案負責PCI聲霸卡和一些PCI BUS的上層card子產品。在pci檔案夾以下儲存着一些簡單的驅動檔案,而一些比較
複雜的,同一時候包括多個程式檔案的驅動會被放置在pci檔案夾以下一個單獨的子檔案夾裡面(如:emu10k1,ice1712)。
sound/isa 該檔案夾檔案是處理ISA聲霸卡的上層card子產品。
sound/arm。sound/ppc。和sound/sparc 這裡檔案夾放置一些和晶片架構相關的一些上層的card子產品。
sound/usb 該檔案夾包括一些USB-AUDIO驅動。
sound/pcmcia PCCard驅動會放到這裡。
CardBus驅動将會放到pci檔案夾裡面,由于API函數和标準PCI卡上統一的。
sound/soc 針對system-on-chip體系的中間層代碼。
sound/soc/codecs 針對soc體系的各種codec的代碼,與平台無關。