Linux ALSA源码分析(基于Linux 5.18)
????????Linux ALSA音頻驅(qū)動(dòng)框架詳細(xì)的描述的ALSA驅(qū)動(dòng)框架的分層及各模塊的主要作用,現(xiàn)在從源碼的角度來分析ALSA驅(qū)動(dòng)。
1、ALSA驅(qū)動(dòng)代碼文件結(jié)構(gòu)
????????在Linux5.18代碼樹中,Alsa的代碼文件結(jié)構(gòu)如下:
linux/sound$ tree -d . ├── ac97 ├── aoa │?? ├── codecs │?? ├── core │?? ├── fabrics │?? └── soundbus │?? └── i2sbus ├── arm ├── atmel ├── core │?? ├── oss │?? └── seq │?? └── oss ├── drivers │?? ├── mpu401 │?? ├── opl3 │?? ├── opl4 │?? ├── pcsp │?? └── vx ├── firewire │?? ├── bebob │?? ├── dice │?? ├── digi00x │?? ├── fireface │?? ├── fireworks │?? ├── motu │?? ├── oxfw │?? └── tascam ├── hda │?? └── ext ├── i2c │?? └── other ├── isa │?? ├── ad1816a │?? ├── ad1848 │?? ├── cs423x │?? ├── es1688 │?? ├── galaxy │?? ├── gus │?? ├── msnd │?? ├── opti9xx │?? ├── sb │?? ├── wavefront │?? └── wss ├── mips ├── oss │?? └── dmasound ├── parisc ├── pci │?? ├── ac97 │?? ├── ali5451 │?? ├── asihpi │?? ├── au88x0 │?? ├── aw2 │?? ├── ca0106 │?? ├── cs46xx │?? ├── cs5535audio │?? ├── ctxfi │?? ├── echoaudio │?? ├── emu10k1 │?? ├── hda │?? ├── ice1712 │?? ├── korg1212 │?? ├── lola │?? ├── lx6464es │?? ├── mixart │?? ├── nm256 │?? ├── oxygen │?? ├── pcxhr │?? ├── riptide │?? ├── rme9652 │?? ├── trident │?? ├── vx222 │?? └── ymfpci ├── pcmcia │?? ├── pdaudiocf │?? └── vx ├── ppc ├── sh ├── soc │?? ├── adi │?? ├── amd │?? │?? ├── acp │?? │?? ├── include │?? │?? ├── raven │?? │?? ├── renoir │?? │?? ├── vangogh │?? │?? └── yc │?? ├── atmel │?? ├── au1x │?? ├── bcm │?? ├── cirrus │?? ├── codecs │?? ├── dwc │?? ├── fsl │?? ├── generic │?? ├── hisilicon │?? ├── img │?? ├── intel │?? │?? ├── atom │?? │?? │?? └── sst │?? │?? ├── avs │?? │?? ├── boards │?? │?? ├── catpt │?? │?? ├── common │?? │?? ├── keembay │?? │?? └── skylake │?? ├── jz4740 │?? ├── kirkwood │?? ├── mediatek │?? │?? ├── common │?? │?? ├── mt2701 │?? │?? ├── mt6797 │?? │?? ├── mt8173 │?? │?? ├── mt8183 │?? │?? ├── mt8192 │?? │?? └── mt8195 │?? ├── meson │?? ├── mxs │?? ├── pxa │?? ├── qcom │?? │?? └── qdsp6 │?? ├── rockchip │?? ├── samsung │?? ├── sh │?? │?? └── rcar │?? ├── sof │?? │?? ├── amd │?? │?? ├── imx │?? │?? ├── intel │?? │?? ├── mediatek │?? │?? │?? ├── mt8186 │?? │?? │?? └── mt8195 │?? │?? └── xtensa │?? ├── spear │?? ├── sprd │?? ├── sti │?? ├── stm │?? ├── sunxi │?? ├── tegra │?? ├── ti │?? ├── uniphier │?? ├── ux500 │?? ├── xilinx │?? └── xtensa ├── sparc ├── spi ├── synth │?? └── emux ├── usb │?? ├── 6fire │?? ├── bcd2000 │?? ├── caiaq │?? ├── hiface │?? ├── line6 │?? ├── misc │?? └── usx2y ├── virtio ├── x86 └── xen??????? core????????????????該目錄包含了ALSA驅(qū)動(dòng)的中間層,它是整個(gè)ALSA驅(qū)動(dòng)的核心部分。
??????? core/oss???????? 包含模擬舊的OSS架構(gòu)的PCM和Mixer模塊。
??????? core/seq???????? 有關(guān)音序器相關(guān)的代碼。
??????? include??????????? ALSA驅(qū)動(dòng)的公共頭文件目錄,該目錄的頭文件需要導(dǎo)出給用戶空間的應(yīng)用程序使用,通常驅(qū)動(dòng)模塊私有的頭文件不應(yīng)放置在這里。
????????drivers???????????? 放置一些與CPU、BUS架構(gòu)無關(guān)的公用代碼。
??????? i2c?????????????????? ALSA自己的I2C控制代碼。
??????? pci?????????????????? pci聲卡的頂層目錄,子目錄包含各種pci聲卡的代碼。
??????? isa?????????????????? isa聲卡的頂層目錄,子目錄包含各種isa聲卡的代碼。
??????? soc????????????????? 針對system-on-chip體系的中間層代碼
??????? soc/codecs????? 針對soc體系的各種codec的代碼,與平臺(tái)無關(guān)。
ALSA API可以分解成以下幾個(gè)主要的接口:
1.聲卡和設(shè)備管理接口(Management of Cards and Devices):提供管理聲卡注冊和請求可用設(shè)備的通用功能2.PCM接口:管理數(shù)字音頻回放(playback)和錄音(capture)的接口。本文后續(xù)總結(jié)重點(diǎn)放在這個(gè)接口上,因?yàn)樗情_發(fā)數(shù)字音頻程序最常用到的接口。3.Raw MIDI接口:支持MIDI(Musical Instrument Digital Interface),標(biāo)準(zhǔn)的電子樂器。這些API提供對聲卡上MIDI總線的訪問。這個(gè)原始接口基于MIDI事件工作,由程序員負(fù)責(zé)管理協(xié)議以及時(shí)間處理。4.過程信息接口(Proc Info API)4.定時(shí)器(Timer)接口:為同步音頻事件提供對聲卡上時(shí)間處理硬件的訪問。5.時(shí)序器(Sequencer)接口6.混音器(Mixer)接口總結(jié)
以上是生活随笔為你收集整理的Linux ALSA源码分析(基于Linux 5.18)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python制作一个成绩分析程序
- 下一篇: linux 其他常用命令