Android音频系统框架简述

情景1:声卡驱动比较复杂,提供一个lib层对驱动进行封装,APP调驱动.。框图如下:
情景1
情景2:厂家对声卡的配置更了解,设置的参数在HAL层,HAL调用lib,传入不同参数,提供给APP.框图如下:
情景2
情景3:
如果多个APP播放声音,把声音合成播放,则多了AudioFlinger层。
情景3
AudioFlinger的作用两个:
1)接受多个APP数据,合并下发
2)合并下发
情景4:
使用手机时:
1)接上耳机,则用耳机
2)如果接上蓝牙,则用蓝牙
3)如果都没有,则用自带喇叭
谁决定如何选择设备?
AudioPolicy层。
情景5:
APP1和APP2和AudioFlinger都是进程,则APP1和APP2无法调用AudioFlinger中的服务,可以通过Binder实现跨进程通信,AudioTrack来封装访问,也就是APP通过AudioTrack来访问AudioFlinger服务。
Audio Track是C++实现的,则APP是要用C++实现。
情景5

情景6:
如果APP是java实现的,则使用JAVA实现的Audio Track。Android的整体框架如下:
情景6

Android的整体框架

如果应用层是JAVA写的,会同样使用JAVA写的AudioTrack,JAVA实现的AudioTrack是对C++编写的AudioTrack的直接引用,AudioTrack会跨进程使用AudioFlinger提供的服务,把应用程序的数据发送给Audioflinger,AudioFlinger合成各个应用层的数据,然后把这些数据,通过厂家封装的HAL层文件,来调用tinyalsa,最终把这些数据发送给驱动,通过驱动把数据发送给硬件。

android整体框架

猜你喜欢

转载自blog.csdn.net/chengbeng1745/article/details/84721710