[Audio]ALSA音频框架-简介

参考:
1. 奇小葩 https://blog.csdn.net/u012489236/article/details/98068122
2. 技术芯 https://blog.csdn.net/sinat_37817094/article/details/80490830
3. 哈迪斯_石头 https://blog.csdn.net/zqh6516336520/article/details/38226333
4. linux kernel:4.4

简介

​ Alsa是Advanced Linux Sound Architecture的缩写,即高级Linux声音架构,在Linux操作系统上提供了对音频和MIDI的支持。在Linux 2.6的内核版本后,Alsa目前已经成为了linux的主流音频体系结构。除了 alsa-driver,ALSA 包含在用户空间的 alsa-lib 函数库,具有更加友好的编程接口,并且完全兼容于 OSS,开发者可以通过这些高级 API 使用驱动,不必直接与内核驱动 API 进行交互。

​ ALSA 主要有如下特点:

  • 支持多种声卡设备、
  • 模块化的内核驱动程序 、
  • 支持 SMP(对称多处理)和多线程、
  • 提供应用开发函数库
  • 兼容OSS应用程序

系统框架

在这里插入图片描述

​ User空间:主要由Alsa Libray API对应用程序提供统一的API接口,各个APP应用程序只要调用 alsa-lib 提供的 API接口来实现放音、录音、控制。现在提供了两套基本的库,tinyalsa是一个简化的alsa-lib库,现在Android的系统中主要使用它。
​ ALSA CORE:alsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)
​ ASOC Core:是 ALSA 的标准框架,是 ALSA-driver 的核心部分,提供了各种音频设备驱动的通用方法和数据结构,为 Audio driver提供 ALSA Driver API
​ Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec,提供的 ALSA Driver API 和相应音频设备的初始化及工作流程,实现具体的功能组件,这也是驱动开发人员需要具体实现的部分。

目录结构

.
├── ac97_bus.c
├── aoa
├── arm
├── atmel
├── core
├── drivers
├── firewire
├── hda
├── i2c
├── isa
├── last.c
├── mips
├── oss
├── parisc
├── pci
├── pcmcia
├── ppc
├── sh
├── soc
├── sound_core.c
├── sound_firmware.c
├── sparc
├── spi
├── synth
└── usb

  • ac97_bus.c -->实现AC97标准总线。

AC97 标准把音频设备中的数字部分和模拟部分分开, 并规定数字信号处理由CPU 来负责,或者采用专门的DSP 芯片; 而模拟部分, 即A/D、D/A 转换与Mix 混音操作, 则由CODEC 芯片(Coder2Decoder: 编码/解码器) 完成。
音频处理的流程如下:
①CODEC 采样音频数据, 把模拟信号转换成数字信号通过AC2link 和AC 控制单元传送给CPU 或DSP 处理。
②CPU 对数字信号处理后交由AC 控制单元通过AC2link 传输给CODEC 进行混音处理,再转换成模拟信号输出。其中AC 控制单元是AC97 CODEC 的控制器。AC2link 是AC97 标准定义的全双工的串行接口, 负责传输音频数据、寄存器控制命令和状态信息。
AC2link 由4 根串行总线和一个nRESET 信号线组成。串行总线分别是: 位时钟信号线(B IT_CL K ) , 帧同步信号线(SYNC ) , 数据输出(SDA TA _OU T ) 和数据输入(SDA TA _IN ) 信号线。它按照AC97 rev211 标准规定的AC2link数字串口接口协议[ 1 ]进行数据的传输。AC2link在B IT _CL K 的上升沿发送数据, 在下降沿接收数据, 实现全双工的数据传输。

  • last.c -->所有音频设备注册完成后打印ALSA devices List

下面是一个log示例:

[    1.814400] ALSA device list:
[    1.814432]   #0: rockchip,rt5640-codec
[    1.814440]   #1: RK-FPGA-I2S
  • sound_core.c -->注册音频核心层子系统
subsys_initcall(init_soundcore);
module_exit(cleanup_soundcore);
  • sound_firmware.c --> 加载音频驱动固件
EXPORT_SYMBOL(mod_firmware_load);

下面是目录及其说明

目录 说明
aoa 苹果板载音频驱动
arm arm音频设备支持
atmel Atmel ABDAC(音频字节流数模转换器)及AC97C(AC97控制器)支持
core 该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分
driver 放置一些与CPU、BUS架构无关的公用代码
firewire 火线(IEEE-1394/FireWire/iLink)音频设备支持
hda HD Audio(高保真音频)支持
i2c ALSA自己的I2C控制代码
isa isa声卡的顶层目录,子目录包含各种isa声卡的代码
mips mips音频设备支持
oss 对oss的兼容支持
parisc 鸿蒙(harmony)音频设备支持(注:支持PA-RISC架构上的GSC音频设备)
pci pci音频设备支持
pcmcia pcmcia音频设备支持
ppc PowerPC 音频设备支持
sh SUPERH架构音频设备支持
soc 针对system-on-chip体系的中间层代码
sparc SPARC架构音频设备支持
spi SPI音频设备支持
synth 一些工具
usb USB音频设备支持

个人博客:https://www.letcos.top/

你可能感兴趣的:([Audio]ALSA音频框架-简介)