解析Android Audio音频模块、框架、架构设计

发布时间:2023-03-07  

Android Audio音频常见问题分析方法

(1).无声

整机无声(bt和手机一起播放声音时):通路策略切错;BT状态不对;data往BT走,BT断开无法播放;全局静音;音量为0;往下写data时中间出现了mute;

整机无声(只有手机):可能是播放设备没有正确选择,输出设备策略选择问题

A2DP无声:正常情况数据走A2DP,实际上走了SCO,但SCO无法接收,所以没有声音

SCO无声:网络原因;没有打开mic


(2).断音

在MTK平台中,audio dump中resample in节点有断音,可能是underrun,原因是APP写数据太慢,这种情况无法优化,只能三方解决。在往下走的其他节点出现断音,通过调整buffer大小来解决(buffer一般情况不动,减少buffer会出现断音,增大buffer会出现延迟)。数据写快了,写慢了都可能造成断音


(3).杂音

通过audio dump定位,在节点af_track就有杂音属于是APP写下来的数据就有杂音。资源文件就有杂音,无法优化。资源文件没有杂音,可能是在上层太忙,buffer太小,出现了underrun,造成了数据损坏,这种情况通过调整buffer来解决,调整frameCount,调大延时变长,request太多,但是写的少,write的数据就有可能丢失。杂音在中间,如effect,resample等情况


(4).设备切换

耳机插拔,蓝牙,不同stream不同的route,不同的volume。track start后马上暂停了


(5).延迟播放

看最开始write数据的时间,可能最开始写的数据就是空的。或者是延迟的写数据的时间


(6).焦点问题

哪一个请求焦点是最新的,焦点就在哪儿


(7).多路录音

(8).有线耳机

(9).蓝牙

(10).控制类问题

如播放、暂停等操作,考虑BT协议的问题

(11).播放时间有问题

分析第一次write date的地方(track write to buffer)

(12).声音在不同应用中切换的问题

分析MediaFocus,谁最后请求,给谁focus,类似栈

(13).无声问题(连上BT)

考虑是否写了data,有没有data传下来,data是否为mute,上层app传递命令是否有错误,BT协议不匹配,track start后是不是马上停了。BT控制是否有问题

(14).音质问题

首先分析dump,确定出现问题的节点,杂音分析buffer,断音一般为underrun(上层app写数据太慢,供不应求,会造成断音或者杂音,解决方案一般是调整buffer大小,buffer调大)3秒一般是standby

(15).录音

一般考虑多路录音,多个record抢占mic

(16).路由问题

(17).BT audio分析总结

分析audio dump,确定写给BT的data是否正常,MTK平台Android原生架构分析threadloop write节点,高通平台分析QXDM 1586节点,从dump确定问题大概位置

分析systrace 确定性能

AudioFocus状态(用于播放或者音量异常的情况)

AudioTrack是否正常创建

bt连接是否正常

通路异常,setMode,setSpeakerphoneOn等都会影响设备选择,sco调用流程是否正常

APM setOutputDevice时已经选择了预期的设备,则是驱动问题

定制版安全手机

Android Audio音频框架图

71f95e4c-bb08-11ed-bfe3-dac502259ad0.png

Android Audio软件架构图

721ac26c-bb08-11ed-bfe3-dac502259ad0.png

72589f4c-bb08-11ed-bfe3-dac502259ad0.png

729c640c-bb08-11ed-bfe3-dac502259ad0.png

Android Audio音频模块

72b04d46-bb08-11ed-bfe3-dac502259ad0.png

从AudioTrack到AudioFlinger

Android Audio音频框架图

72d39b7a-bb08-11ed-bfe3-dac502259ad0.png

AudioTrack、PlaybackThread、输出流设备三者的对应关系

72fce0d4-bb08-11ed-bfe3-dac502259ad0.png

73227a24-bb08-11ed-bfe3-dac502259ad0.png

AudioTrack和AudioFlinger的类图,AudioFlinger的主要类及其关系、AudioTrack与AudioFlinger之间的联系

733cdfd6-bb08-11ed-bfe3-dac502259ad0.jpg

AudioFlinger拥有的PlaybackThread、Track、TrackHandle实例

735e1412-bb08-11ed-bfe3-dac502259ad0.png


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    到电脑, 安装ST的ST-LINK Utility软件,使用STM32 ST-LINK Utility 软件下载固件(这个软件官网可以下载)。先连接后下载,要是软件识别不了你的芯片,那你......
    STM32_ ADC单通道单次采集;今天的软件工程下载地址(360云盘): https://yunpan.cn/cPGrE6DLHX24R 访问密码 de4f STM32F10x的资料可以在我360......
    免费分享的原则,将讲解的工程源代码分享给大家,还望看到的朋友关注和推广一下微信公众号,增加一下人气。 每天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。 今天的软件工程下载......
    ,需先将下方固件下载到本地电脑端,若使用在线工具Web BDT(https://debug.telink-semi.cn/web_bdt/index.html),则可在线下载固件。(两个bin......
    ,后面就不用初始化)。例程是在第一次初始化RTC值为:2016年6月5日 周七 1200(自己可修改)。之后每秒读取一次,并通过串口打印出来。这里可以设置秒中断,不用软件等待1秒才去读取。 Ⅱ、下载......
    知道如何而来,请关注微信公众号“EmbeddDeveloper”获取更多信息。 今天的软件工程下载地址(360云盘): https://yunpan.cn/cPU3YIHzcu6Eu访问密码 11f0......
    工程“DDAC输出三角波形”修改而来。若有疑问,请关注微信公众号“EmbeddDeveloper”获取更多信息。 每天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘......
    今天站在技术知识的角度来看待“闹钟”。由于这一阶段定位的是基础的知识,所以今天提供的软件例程也是相对简单一点的,但明白今天的知识,相信自己都会写闹钟程序了,后期我会更新日历及闹钟的综合知识。 每天提供下载的“软件......
    际应用中作为主机是比较常见的一种,因为SPI的通信速度远比I2C的通信速度大,所以现在市面上有很多SPI从设备。 Ⅱ、下载 文章提供的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360......
    手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。 今天的软件工程下载地址(360云盘): https://yunpan.cn/cS5TeTVUWdc7V访问......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>