音频框架

  • 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下:

Android配置声卡 安卓调用声卡_linux


Android配置声卡 安卓调用声卡_android_02

以上介绍基本都是为了引出tinyalsa,下面开始android 音频框架

3、android 音频框架

良好的软件架构需要降低上层的实现和硬件设备的耦合,下图红色部分为linux的音频架构雏形,而除去audio driver之外,整个android的音频体
系被看成User,其蓝色部分:

Android配置声卡 安卓调用声卡_音频驱动_03

我们现在来逐一说明一下每一部分:
APP:整个音频最上层的音频播放或者录音软件

Freamwork: android为上层音频播放 录音软件提供了操作的接口,方便它们处理业务和逻辑代码,这里提供的Freamwork的类主要有,AudioManager、AudioService、AudioSystem、MediaPlayer、MediaRecorder等。

Libraries:向framework层提供底层库的支持,这部分基本都是c++实现的。

HAL: android hal 提供了统一的接口来定义和AudioFlinger / AudioPolicy service 之间的通信方式。从设计层面来讲,音频的硬件抽象层的 服务对象是AudioFinger。AudioFilnger向下直接和Audio HAL通信,不用接触到audio Driver,向上上层模块只需要和它进行通信就可以实现音频相关的功能。