主要是把audio Framework 中关键的文件列了出来,按照层次结构的关系放在对应的位置,对应普通的apk(第三方apk)而言,基本上只会接触到AudioManager.java ,AudioRecord.java,AudioTrack.java这个三支文件里面的类和接口。
1、 AudioManager
用来对音量大小,声音模式等管理,值得注意的是调用它的接口并没有直接call到AudioFlinger(或者AudioPolicyService)里面去,而是先跑到system_server里面的AudioService,提供的接口我就不介绍了,网上相关的资料和文档一大推。
2、AudioRecord
AudioRecord类管理着音频来源,用来获取底层录入的音频数据。在java层似乎只能通过自己创建一个线程不停地去读数据,如果看过底层录制相关代码的应该知道,下面创建AudioRecord(C++层)会传入一个回调函数,通过回调函数来得到audio数据。其实这两个都是在拉数据,只不过是在实例化AudioRecord,内部创建了一个线程,用于不停地读数据,读到数据后,通过回调函数进程callbak而已。
3、AudioTrack
AudioTrack是管理和播放单一音频资源的类,它用于PCM音频流的播放。需要重点关注和了解的应该它的两种模式,static和stream模式。
static:简单理解为需要先把所有音频数据写到buffer里,然后在播放,适用于数据量小,要求播放延时小的场景。
stream:简单理解成先启动播放,然后应用送一点数据就播放一点,像播放比较大的音频文件就需要这种模式。