Android Audio常见问题分析方法

news/2024/10/19 1:29:11/

Audio常见问题分析方法

  • 无声
  • 断音
  • 杂音
  • 设备切换
  • 延迟播放
  • 焦点问题
  • 多路录音
  • 有线耳机
  • 蓝牙
  • 控制类问题
  • 播放时间有问题
  • 声音在不同应用中切换的问题
  • 无声问题(连上BT)
  • 音质问题
  • 录音
  • 路由问题
  • BT audio分析总结

无声

  1. 整机无声(bt和手机一起播放声音时):通路策略切错;BT状态不对;data往BT走,BT断开无法播放;全局静音;音量为0;往下写data时中间出现了mute;
  2. 整机无声(只有手机):可能是播放设备没有正确选择,输出设备策略选择问题
  3. A2DP无声:正常情况数据走A2DP,实际上走了SCO,但SCO无法接收,所以没有声音。
  4. SCO无声:网络原因;没有打开mic。

断音

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

杂音

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

设备切换

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

延迟播放

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

焦点问题

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

多路录音

有线耳机

蓝牙

控制类问题

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

播放时间有问题

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

声音在不同应用中切换的问题

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

无声问题(连上BT)

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

音质问题

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

录音

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

路由问题

BT audio分析总结

  1. 分析audio dump,确定写给BT的data是否正常,MTK平台Android原生架构分析threadloop write节点,高通平台分析QXDM 1586节点,从dump确定问题大概位置 。
  2. 分析systrace 确定性能。
  3. AudioFocus状态(用于播放或者音量异常的情况)。
  4. AudioTrack是否正常创建
  5. bt连接是否正常
  6. 通路异常,setMode,setSpeakerphoneOn等都会影响设备选择,sco调用流程是否正常
  7. APM setOutputDevice时已经选择了预期的设备,则是驱动问题

http://www.ppmy.cn/news/696.html

相关文章

NLP中的对抗训练(附PyTorch实现)

对抗样本的基本概念 要认识对抗训练,首先要了解"对抗样本",它首先出现在论文Intriguing properties of neural networks之中。简单来说,它是指对于人类来说"看起来"几乎一样,但对于模型来说预测结果却完全不…

java计算机毕业设计中小型超市管理系统源程序+mysql+系统+lw文档+远程调试

java计算机毕业设计中小型超市管理系统源程序mysql系统lw文档远程调试 java计算机毕业设计中小型超市管理系统源程序mysql系统lw文档远程调试本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技…

Spire.Doc 10.11.9 支持设置形状填充颜色的透明度

度娘找破解版Spire.Doc for .NET是一个专业的Word .NET库,专门为开发人员设计,用于在任何.NET 平台(Target .NET Framework、.NET Core、.NET Standard、 .NET 5.0、.NET 6.0、Xamarin 和 Mono Android),具有快速和高质…

基于ssm的小区物业管理系统

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

Linux的十个常用命令

目录 1、ls 2、pwd 3、cd 4、touch 5、cat 6、echo 7、mkdir 8、rm 9、mv 10、cp 1、ls ls命令用于显示目录中的文件信息. 格式:ls [选项] [文件] 参数: -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)-l 除文件名称外,亦将文件型…

3.2 基于vexpress-a9 arm平台 的QEMU仿真的rootfs镜像环境搭建

一,配置编译busybox 1.1 配置 make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig 1.2 勾选静态构建选项 --- Build Options [*] Build static binary(no shared libs) 1.3 编译 make defconfig make CROSS_COMPILE=arm-linux-gnueabi- make install CROSS_COMPILE=…

死锁问题【javaEE初阶】

什么是死锁? 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 因此我们举个例子来描述,如果此时有一个线程A&…