Android音频从理解到应用-前言

        兜兜转转做了这么多年Android,那么多模块,但是之前Android的Audio子系统一直未曾触及,常言道,得不到的总是最香的,自己不会的总是最好的。恰逢最近的产品又是语音智能相关,音频也是一大特色功能,可是找一个音频工程师小伙伴那是多难,比自己干都难,只好赶鸭子上架。

        这次的Android项目是基于Android 9对音频子系统进行了多处定制,在HAL层修改了音频输入的路径,在HAL层加入了自有的声学前处理模块(降噪、回声消除等),将音频处理后通过Android流程送入Framework;修改了支持多路同时录音,这是Android 9原生代码还不支持的;修改了Audio输出的路由,支持多路同时播放,也就是可以通过不同的输出设备同时出不同的声音;音频又是对延时如此敏感的娇嫩之物。。。是不是说的有点多了。

        网上音频相关文章很多但是也很碎片化,Android音频的Code也是纷繁复杂,音频又是多少有一些自己的领域知识基础。最初如果有人能够条丝缕析,拉平这条学习、掌握的曲线,甚至拉短这条学习的曲线,那该多好!这个系列的文章尝试让大家能够更快地掌握Android音频,能够更好地理解,更快地应用,尤其是目前智能座舱热起来后,音频开发和定制也是其中一个非常重要的功能。仔细的回顾了自己的这段学习旅程,希望这系列文章能够给大家带来帮助,希望大家能够从理解音频子系统开始,到能够应用,不论是写音频相关的应用还是做系统开发。

        这系列文章不希望仅仅介绍音频各个模块的实现,例如AudioRecod的流程、AudioTrack的流程、AudioFlinger的实现等等,那这样的话就没有必要写这系列的文章。我们尝试多问一个为什么,Android为什么是AudioRecod+AudioTrack+AudioFlinger+AudioPolicyManager的设计,一拍脑袋一闭眼就这么设计实现了吗?显然不是,他是原创的吗?其实也不算。这其实是参考了典型的操作系统音频子系统的实现,结合音频软硬件的特点,音频的领域知识,综合了业界标准、性能和可扩展性。所以当你从这儿寻找答案,带着这些问题来看这些代码的时候,可能会有更多的收获,也许有一种一览众山小的感觉,一切尽在掌握。否则一直在点状的知识中遨游,永远也不会到武功的另外一个境界。

        其实这个地方还想多扯一点,以前做面试的时候,跟做Android的小伙伴聊的时候,我总是喜欢问一个问题,大家只要做过应用,都知道Android有Window/View/Activity的概念,大家有没有想过Android为什么会引进这几个概念,就用一个不香吗?搞那么复杂干什么?Framework里面为什么要设计ActivityManagerService/WindowManagerService?把Android看成一个正常的操作系统,大家就能理解了,看看MS Windows的窗口系统架构,看看Linux发行版的窗口系统——GNOME/KDE的架构,是不是天下乌鸦一般黑,大家竟然都一样。当你从这个角度开始学习Android代码的时候,你也会更加系统化、结构化,打怪的级别也更高。

        我也初步梳理了这个系列文章的顺序,第一章到第三章是如何理解Android音频子系统,从音频的基础知识开始,到音频涉及到的那些概念,以及在设备上如何保存的;后面几章介绍Android如何设计他的音频系统,如何实现它的每一个元素,前面的这些部分算是我们理解的部分。再往后面几章我们如何应用了,从如何调试、如何书写音频应用等,实际上做系统开发只分析系统是不可行的,每次我在调试一个功能的时候,也会构建一个简单的应用,接下来介绍在实际项目经历中如何定制修改Android音频应用。最后一部分试图梳理Android音频子系统的发展。

        整体的书写节奏大概在每周1-2篇,定下这个计划也踌躇许久,深知书写不易,希望自己能够坚持下来。初步的大纲计划如下:

第一章 Android音频基础知识

        01 Android音频基础知识

        02 Android音频知识进阶(声学前端处理的基本概念:降噪、回声消除、音源定位、AGC、去混响)

        03 Android音频术语

        04 音频数据格式

        05 音频数据转换实践

第二章 Android音频系统实现

        06 Android音频子系统功能(包括典型的智能设备的音频逻辑架构图(手机/电视/车机))

        07 Android音频架构概览

        08 Android音频基本设计

        09 AudioRecord流程分析

        10 AudioTrack流程分析

        11 音量控制流程

第三章 Android音频进阶

        12 AudioPolicyManager及路由策略分析

        13 AudioFlinger

        14 Audio Hal流程分析

        15 AudioBuffer分析

        16 Audio Effect

        17 AudioPatch

        18 AudioOffload

        19 Bluetooth Audio

        20 Audio Focus

第四章 Android音频的调试

        21 Android音频开发中遇到的问题及调试方法

第五章 Android音频应用的开发

第六章 Android音频系统定制化修改案例

        20 AudioHal定制化采集流程

        21 Android 9中实现多路音频输出

        22 Android 9中实现并发录音

        23 Android 9中实现单独蓝牙音量控制

第七章 Android音频系统的发展9/10/11/12

        啰啰嗦嗦,竟然也写了这么多,如果真正想熟练掌握Android音频子系统的实现,并实现定制自由,还是要结合文章来捋代码。撸代码是检验真理的唯一标准。

        这系列文章也要感谢CSDN博客的多位专家,在学习的路上给了我很多借鉴!

        与大家共勉!共同讨论!

你可能感兴趣的:(Android音频从理解到应用,android,音视频,Android音频,音频,audio)