Linux音频子系统
硬件基础
传统音频电路包含麦克风、前置放大器、模数转换器ADC、数模转换器DAC、输出放大器、扬声器,如图所示:
ALSA简介
包含
- 内核驱动 alsa-driver
- 用户空间开发包 alsa-libs
- 开发包插件 alsa-plugins
- 设置管理工具包 alsa-utils
- 声音处理小程序包 alsa-tools
- 特殊音频固件支持包 alsa-firmware
- OSS接口兼容模拟层工具 alsa-oss
alsa-libs函数库,具有更加友好的编程接口,并且完全兼容 OSS,开发者可以通过其中的高级API使用驱动,不必直接与内核驱动API进行交互。 alsa-utils工具包,包含有声卡测试和音频编辑的工具。
框架
代码结构
- 用户空间:Alsa Libray API对应用程序提供统一的API接口,调用alsa-lib提供的API接口实现放音、录音、控制。
- Alsa Core:Alsa核心层,向上提供逻辑设备的系统调用,向下驱动硬件设备。
- Asoc Core:Alsa的标准框架,Alsa驱动的核心部分,提供音频设备驱动的通用方法和数据结构,为Audio Driver提供Alsa Driver API。
- Hardware Driver:音频硬件设备驱动,Machine、Platform、Codec三部分组成,提供Alsa Driver API和音频设备的初始化及工作流程,实现具体的功能组件,这是驱动开发人员需要具体实现的部分。
数据流向
音频设备主要有3种硬件接口:PCM、I2S、AC97,参考音频设备的3种硬件接口–PCM,IIS和AC97。
目录
kernel-4.9
├── sound
├── 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标准总线 |
aoa | 苹果板载音频驱动 |
arm | arm音频设备支持 |
atmel | atmel ABDAC(音频字节流数模转换器)和ac97C(ac97控制器) | </