背景:
近期一个学员求助一个需求,需求大概描述如下:
公司一个安卓定制产品,客户想要实现对手机设备的所有声音进行录制同时还需要录制mic麦克风声音。而且要求录制系统声音(内录)时候要求喇叭speaker也可以正常发声,尽量可以不需要修改系统源码(因为版本已经发布,老板希望尽量客户需求只提供现成方案),直接让客户app基于系统编译安装既可以。
需求分析
1、实现两个声音同时录制和合成
这个其实比较好实现,大概思路就是可以搞出两个AudioRecord,一个AudioRecord实现内录考虑REMOTE_SUBMIX,另一个mic声音也可以采用AudioRecord进行录制。
然后把两个AudioRecord的buffer进行相加合成最后的buffer。
2、系统内录声音时候,要求speaker也可以有声音
上面学员的需求提出后,其实学习过audio课程后就知道内录系统声音的实现,如果采用普通的AudioRecord加上AudioSource.REMOTE_SUBMIX方案,会发现Speaker就无法出声了。
audio课程中虽然有相关的实战案例让系统内录声音时候speaker也发出声音的情况,不过当时是有修改AudioPolicyManager中获取device中额外添加上speaker这个device,但是学员这里是要求不要修改系统源码就可以实现,所以这种现成的方案就不适用了。
那么如何实现不通过修改系统源码实现这个功能呢?
学员作业要求:
1、先不考虑是否可以修改系统源码情况,自己思考出一种方案可以实现相关需求
2、调研查看aosp系统中是否已经有了这个类似功能,如果有可以考虑把这个功能进行参考学习
3、如果第2步调查到有具体的功能,请针对这个功能相关代码进行相关实现原理进行剖析
原文参考:https://mp.weixin.qq.com/s/ocmGyBOAj91DWj_1Eu3D5A
更多framework实战开发干货,请关注下面“千里马学框架”