Android Audio简述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Audio简述相关的知识,希望对你有一定的参考价值。

参考技术A audio是android系统是比较重要的一个模块,本人也涉足时间不是很长,经验还是很少的,只是把自己在工作中所遇到的问题记录。

Audio 即音频, 也就是控制着手机中的各种声音的输出,比如说,音乐的播放,音量大小,按键音,插入耳机,声音从耳机播放,连接蓝牙,声音从蓝牙耳机中播放。还有一些HiFi播放, offload播放,高清播放。

常见的问题如下:

POP音,漏音,声音卡顿,耳机无法识别,还有一些音频通路等问题,还有一些稳定性的问题如:ANR、CRASH、tombstone。还有一些安全漏洞的问题(主要是核心库那里)。

回归正题

-------华丽的分割线-------

audio分为  应用层,fwk层,native fwk, hal层。

常见的文件有MediaPlayer.java、 Audiosystem.java、 AudioService.java、AudioManager.java 文件路径(framework/base/media)

AudioFlinger.cpp、AudioTrack.cpp、 AudioPolicyManager.cpp、 Threads.cpp、Tracks.cpp、 Engine.cpp、 Audiosystem.cpp  文件路径(framework/av)

audio_hw.c  文件路径(vendor/)

java文件我在这里就不过多的说了,没啥好讲的,主要说一下c++文件吧。

AudioFlinger 是音频策略的执行者, AudioPolicyManager是制作音频策略的,AudioTrack是负责播放从上层传过来的PCM数据,简单的说就是负责播放的。 

audio_hw 是每个HAL层的文件,每个手机厂商自己定制的文件。当然Google也有。

一般呢,我们处理音频相关的问题呢,有一些特定的套路,需要AP 侧的log, 有时还需要kernel 的log,  当然最主要的是需要音频数据。也就是出现问题时,的声音数据,让我们可以快速的定位出现问题的位置。

简单的说下播放一首歌曲的流程:(以Android O 为例)

上层创建一个MediaPlayer对象,然后调用NuPlayer框架(播放器),NuPlayer先将当前歌曲的文件信息读取,采样率,比特率,等之类的东西。然后开始调用audio decoder (音频解码器)  将解码出来的PCM数据传给AudioTrack,  Audiotrack 会创建一个Track,(每一个播放都会创建一个属于自己的track,不用了就销毁,最多可以同时创建32个),经过AudioFlinger重采样之后,送到HAL层,HAL层在经过一些混音,降噪之类的处理,将声音送到Codec,然后送给硬件输出,进行播放。

这个是一个大概的播放流程,如果我们在播放过程中遇到了一些问题,比如说是fwk层的问题,我们就在AudioTrack与AudioFlinger之间寻问题的原因。

比如说,播放无声,我们需要看AudioPolicyManager中的一些策略是不是将当前的track给mute了。或者是一些其他的原因等。

这里只是简单的介绍下Audio,Audio算是一个较为复杂的模块,还需要好好的研究。

Android 9 Audio系统笔记:Audio系统架构

前言

这里主要简单总结一下Android 9 的Audio系统架构。

Audio系统架构

主要包含FW_Java部分,FW_Native部分和AudioHal部分。

FW_Java

FW_Java:主要包含AudioService、CarAudioService部分,以及AudioManager、AudioTrack、AudioRecord部分。这些主要是提供音频焦点处理、汽车音频控制的服务,以及对应用提供音频控制等相关接口。

FW_Natvie

FW_Natvie:主要包含AudioPolicyManager、AudioFlinger、AudioSystem等。这些主要提供对音频策略、音频路由等的控制和实现。

AudioHal

AudioHal:主要包含audio_hw,AudioControl等。向上提供统一接口以便提供给FW_Native调用,AudioHal主要实现对驱动层的控制和功能调用。

简单说明:图中的fun为引用调用,比如回调之类的调用,binder则为binder方式调用,而HIDL则是Android HIDL方式进行的调用。

字少事大,๑乛◡乛๑
完。

以上是关于Android Audio简述的主要内容,如果未能解决你的问题,请参考以下文章

Android 9 Audio系统笔记:Audio系统架构

Android audio介绍

Android Automotive OS | Android Audio Focus Manager

如何向android shell用户授予android.permission.RECORD_AUDIO权限?

解析audio_policy.conf(android_audio)

Android -- Audio Native服务之启动流程分析