音频框架
- 1、linux 中的音频框架
- 1.1、声卡介绍
- 1.2、声卡组成
- 2 音频驱动
- 2.1 OSS
- 2.2 ALSA
- 3、android 音频框架
1、linux 中的音频框架
1.1、声卡介绍
众所周知,android 系统是以linux为基准的,那么在介绍android 音频框架之前,稍微带一下linux的音频系统。
早期的声卡以插件的方式连接到电脑主板上的,并提供了复杂的音频设备,后期随着技术的发展又出现了“集成声卡”,“集成声卡”又分为“软声卡”
和“硬声卡” --- 如果声卡只有解码芯片,没有“主处理”芯片,需要通过cpu运算来执行处理工作,那么就是“软声卡”,反之就是“硬声卡”。
1.2、声卡组成
一个典型的声卡由三部分组成:
Connectors:用于声卡与外放设备,如扬声器、耳机的连接等。
Audio Circuits:是、声卡的主体实现,负责信号的放大、混音以及模拟数字信号的转换操作
Interface: 连接声卡与计算机总线的单元,如PCI总线。
2 音频驱动
对于一个操作系统来说,如果管理这些音频设备并向上层应用提供统一的接口,这就需要音频驱动
2.1 OSS
早起Linux采用的版本是OSS框架,但后期因为OSS涉及到4Front Technologisc的版权问题,所以导致支持和升级不是很友好就慢慢的抛弃了它,从而出现了ALSA。
2.2 ALSA
ALSA 是Linux社区为了取代OSS而提出的一种框架,是一个完全的开源系统,ALSA 相对于OSS提供了更多复杂的API接口,后面
android系统也使用了ALSA,但是由于ALSA太过于庞大,android 对其进行了剪裁,就出现了tinyalsa, 我们可以在android的源码目录下看到,tinyalsa的代码,在external/tinyalsa下:
以上介绍基本都是为了引出tinyalsa,下面开始android 音频框架
3、android 音频框架
良好的软件架构需要降低上层的实现和硬件设备的耦合,下图红色部分为linux的音频架构雏形,而除去audio driver之外,整个android的音频体
系被看成User,其蓝色部分:
我们现在来逐一说明一下每一部分:
APP:整个音频最上层的音频播放或者录音软件
Freamwork: android为上层音频播放 录音软件提供了操作的接口,方便它们处理业务和逻辑代码,这里提供的Freamwork的类主要有,AudioManager、AudioService、AudioSystem、MediaPlayer、MediaRecorder等。
Libraries:向framework层提供底层库的支持,这部分基本都是c++实现的。
HAL: android hal 提供了统一的接口来定义和AudioFlinger / AudioPolicy service 之间的通信方式。从设计层面来讲,音频的硬件抽象层的 服务对象是AudioFinger。AudioFilnger向下直接和Audio HAL通信,不用接触到audio Driver,向上上层模块只需要和它进行通信就可以实现音频相关的功能。