• Linux ALSA源码分析(基于Linux 5.18)


            Linux ALSA音频驱动框架详细的描述的ALSA驱动框架的分层及各模块的主要作用,现在从源码的角度来分析ALSA驱动。

    1、ALSA驱动代码文件结构

            在Linux5.18代码树中,Alsa的代码文件结构如下:

    1. linux/sound$ tree -d
    2. .
    3. ├── ac97
    4. ├── aoa
    5. │   ├── codecs
    6. │   ├── core
    7. │   ├── fabrics
    8. │   └── soundbus
    9. │   └── i2sbus
    10. ├── arm
    11. ├── atmel
    12. ├── core
    13. │   ├── oss
    14. │   └── seq
    15. │   └── oss
    16. ├── drivers
    17. │   ├── mpu401
    18. │   ├── opl3
    19. │   ├── opl4
    20. │   ├── pcsp
    21. │   └── vx
    22. ├── firewire
    23. │   ├── bebob
    24. │   ├── dice
    25. │   ├── digi00x
    26. │   ├── fireface
    27. │   ├── fireworks
    28. │   ├── motu
    29. │   ├── oxfw
    30. │   └── tascam
    31. ├── hda
    32. │   └── ext
    33. ├── i2c
    34. │   └── other
    35. ├── isa
    36. │   ├── ad1816a
    37. │   ├── ad1848
    38. │   ├── cs423x
    39. │   ├── es1688
    40. │   ├── galaxy
    41. │   ├── gus
    42. │   ├── msnd
    43. │   ├── opti9xx
    44. │   ├── sb
    45. │   ├── wavefront
    46. │   └── wss
    47. ├── mips
    48. ├── oss
    49. │   └── dmasound
    50. ├── parisc
    51. ├── pci
    52. │   ├── ac97
    53. │   ├── ali5451
    54. │   ├── asihpi
    55. │   ├── au88x0
    56. │   ├── aw2
    57. │   ├── ca0106
    58. │   ├── cs46xx
    59. │   ├── cs5535audio
    60. │   ├── ctxfi
    61. │   ├── echoaudio
    62. │   ├── emu10k1
    63. │   ├── hda
    64. │   ├── ice1712
    65. │   ├── korg1212
    66. │   ├── lola
    67. │   ├── lx6464es
    68. │   ├── mixart
    69. │   ├── nm256
    70. │   ├── oxygen
    71. │   ├── pcxhr
    72. │   ├── riptide
    73. │   ├── rme9652
    74. │   ├── trident
    75. │   ├── vx222
    76. │   └── ymfpci
    77. ├── pcmcia
    78. │   ├── pdaudiocf
    79. │   └── vx
    80. ├── ppc
    81. ├── sh
    82. ├── soc
    83. │   ├── adi
    84. │   ├── amd
    85. │   │   ├── acp
    86. │   │   ├── include
    87. │   │   ├── raven
    88. │   │   ├── renoir
    89. │   │   ├── vangogh
    90. │   │   └── yc
    91. │   ├── atmel
    92. │   ├── au1x
    93. │   ├── bcm
    94. │   ├── cirrus
    95. │   ├── codecs
    96. │   ├── dwc
    97. │   ├── fsl
    98. │   ├── generic
    99. │   ├── hisilicon
    100. │   ├── img
    101. │   ├── intel
    102. │   │   ├── atom
    103. │   │   │   └── sst
    104. │   │   ├── avs
    105. │   │   ├── boards
    106. │   │   ├── catpt
    107. │   │   ├── common
    108. │   │   ├── keembay
    109. │   │   └── skylake
    110. │   ├── jz4740
    111. │   ├── kirkwood
    112. │   ├── mediatek
    113. │   │   ├── common
    114. │   │   ├── mt2701
    115. │   │   ├── mt6797
    116. │   │   ├── mt8173
    117. │   │   ├── mt8183
    118. │   │   ├── mt8192
    119. │   │   └── mt8195
    120. │   ├── meson
    121. │   ├── mxs
    122. │   ├── pxa
    123. │   ├── qcom
    124. │   │   └── qdsp6
    125. │   ├── rockchip
    126. │   ├── samsung
    127. │   ├── sh
    128. │   │   └── rcar
    129. │   ├── sof
    130. │   │   ├── amd
    131. │   │   ├── imx
    132. │   │   ├── intel
    133. │   │   ├── mediatek
    134. │   │   │   ├── mt8186
    135. │   │   │   └── mt8195
    136. │   │   └── xtensa
    137. │   ├── spear
    138. │   ├── sprd
    139. │   ├── sti
    140. │   ├── stm
    141. │   ├── sunxi
    142. │   ├── tegra
    143. │   ├── ti
    144. │   ├── uniphier
    145. │   ├── ux500
    146. │   ├── xilinx
    147. │   └── xtensa
    148. ├── sparc
    149. ├── spi
    150. ├── synth
    151. │   └── emux
    152. ├── usb
    153. │   ├── 6fire
    154. │   ├── bcd2000
    155. │   ├── caiaq
    156. │   ├── hiface
    157. │   ├── line6
    158. │   ├── misc
    159. │   └── usx2y
    160. ├── virtio
    161. ├── x86
    162. └── 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. 1.声卡和设备管理接口(Management of Cards and Devices):提供管理声卡注册和请求可用设备的通用功能
    2. 2.PCM接口:管理数字音频回放(playback)和录音(capture)的接口。本文后续总结重点放在这个接口上,因为它是开发数字音频程序最常用到的接口。
    3. 3.Raw MIDI接口:支持MIDI(Musical Instrument Digital Interface),标准的电子乐器。这些API提供对声卡上MIDI总线的访问。这个原始接口基于MIDI事件工作,由程序员负责管理协议以及时间处理。
    4. 4.过程信息接口(Proc Info API)
    5. 4.定时器(Timer)接口:为同步音频事件提供对声卡上时间处理硬件的访问。
    6. 5.时序器(Sequencer)接口
    7. 6.混音器(Mixer)接口

  • 相关阅读:
    Linux入侵排查
    自动化项目实战:用requests库自动保存王者荣耀英雄皮肤到本地,文末附源码下载!
    第29课 绘制原理图——放置电源端口
    Oracle数据库中的数据完整性
    【面试普通人VS高手系列】Spring Boot中自动装配机制的原理
    osg给osg::Geometry(自己绘制的几何体)添加纹理(二)
    笔试强训第十九天 (最长公共子串+汽水瓶)
    年薪超20万,IT业成2021年平均工资最高的行业
    不要再说你不会了——网络性能问题排查思路
    python趣味编程-5分钟实现一个俄罗斯方块游戏(含源码、步骤讲解)
  • 原文地址:https://blog.csdn.net/code_lyb/article/details/125767221