Linux ALSA源码分析(基于Linux 5.18)
????????Linux ALSA音頻驅動框架詳細的描述的ALSA驅動框架的分層及各模塊的主要作用,現在從源碼的角度來分析ALSA驅動。
1、ALSA驅動代碼文件結構
????????在Linux5.18代碼樹中,Alsa的代碼文件結構如下:
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驅動的中間層,它是整個ALSA驅動的核心部分。
??????? core/oss???????? 包含模擬舊的OSS架構的PCM和Mixer模塊。
??????? core/seq???????? 有關音序器相關的代碼。
??????? include??????????? ALSA驅動的公共頭文件目錄,該目錄的頭文件需要導出給用戶空間的應用程序使用,通常驅動模塊私有的頭文件不應放置在這里。
????????drivers???????????? 放置一些與CPU、BUS架構無關的公用代碼。
??????? i2c?????????????????? ALSA自己的I2C控制代碼。
??????? pci?????????????????? pci聲卡的頂層目錄,子目錄包含各種pci聲卡的代碼。
??????? isa?????????????????? isa聲卡的頂層目錄,子目錄包含各種isa聲卡的代碼。
??????? soc????????????????? 針對system-on-chip體系的中間層代碼
??????? soc/codecs????? 針對soc體系的各種codec的代碼,與平臺無關。
ALSA API可以分解成以下幾個主要的接口:
1.聲卡和設備管理接口(Management of Cards and Devices):提供管理聲卡注冊和請求可用設備的通用功能2.PCM接口:管理數字音頻回放(playback)和錄音(capture)的接口。本文后續總結重點放在這個接口上,因為它是開發數字音頻程序最常用到的接口。3.Raw MIDI接口:支持MIDI(Musical Instrument Digital Interface),標準的電子樂器。這些API提供對聲卡上MIDI總線的訪問。這個原始接口基于MIDI事件工作,由程序員負責管理協議以及時間處理。4.過程信息接口(Proc Info API)4.定時器(Timer)接口:為同步音頻事件提供對聲卡上時間處理硬件的訪問。5.時序器(Sequencer)接口6.混音器(Mixer)接口總結
以上是生活随笔為你收集整理的Linux ALSA源码分析(基于Linux 5.18)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python制作一个成绩分析程序
- 下一篇: Jetson NX和Nano上使用Ten