你好!这里是风筝的博客,

欢迎和我一起交流。


又是一个数字耳机的坑,又被我遇到了,唉。。。

测试反馈:客观测试,数字耳机通话上行响度不达标(非必现,极大概率)。

因为我是做手机的嘛,手机场景这么多,直接面向用户的,所以测试非常多,也考虑用户感受,不然如果手机不好用估计要被用户喷死。。。。。

这里就分为主观测试和客观测试:
主观测试:音频测评工程师就带上数字耳机通话,肉身感受通话音频效果质量。
客观测试:把手机放在音频实验室(有一个人头模型),给人工耳挂上耳机,人工嘴挂上耳机mic,用机器来测试。

然后实验室里面还有一个伪基站,手机用白卡来打电话,通话的各项数据会被伪基站捕捉,然后可以直观的看到。

测试就和我反馈,上行响度不达标。但是主观测试没有这个问题。

同样是打电话测试,主观测试不复现,客观测试就复现???这是在开玩笑吗

行,响度不达标应该是哪里增益没设对,或者音量曲线没调好,那给我抓一份log我瞅瞅吧。

结果测试和我说了第二句话:没有log,因为一开MTKlog工具(DebugLogger)去抓log,问题就不复现了

这没有log我分析个啥???

然后又和其他测试聊到,问题应该是通话无声,或者增益太小导致的听不见的无声?
这又给我真懵逼了,这是几个问题啊,没办法,没有log无法分析啊,只能和测试一顿py,接着尝试抓log,请加大力度!!!

因为MTKlog抓的东西比较多,所以尝试只抓部分log。只抓mobile log,只抓modem log,只抓VM log,只抓mobile log + VM log,只抓…

因为通话算法用的三方算法,所以也找了三方的人来一起看这个问题。

好不容易抓到一次log,发现ADSP里面bypass了aurisys,也就是ADSP里面没有跑三方的通话算法,可能是这里导致ul gain设置有问题。

MTK认为需要一份开机log才能知道为什么ADSP会走bypass,我天,抓log都够难的了,咋还能给你抓开机log啊。
继续抓,又抓到一份log,这份log里面ADSP没报错,但是没有抓到通话算法的dump,所以也没法证明是不是算法出了问题,至少这份log里面ADSP没有问题。

没办法,只能从通话算法这边想办法,尝试算法使用bypass参数,依旧不能解决这个问题,所以算法那边认为这题和通话算法无关。

因为开log就会导致问题不复现,所以猜测问题原因然后一遍修改一遍测试,看能否解决掉这个问题,然后也尽力去抓复现的log。结果占用测试人力过多,测试也恼了。。。。。。

唉,手机厂就这个毛病,节奏快,这才几天,就一直催解决,天天被催,测试也恼,没有人力了,要我研发自己去实验室测。。。。

因为没有有效log,分析进度实在不行啊,音频实验室在外地,只能我亲自出马了!!我一个研发居然也要我出差了,泪目。。。

出差去到实验室之后,我亲自试了下,确实很神奇!!不开log就能复现异常,开了log之后就死活不复现了。

一开始我以为是性能问题导致的,手机开启高性能模式之后也不起作用。

那我只能用出终极办法了,高端的调试方法往往就是一个朴素的命令:
adb shell logcat > D:\log.txt

结果,不是吧,啊sir,我就仅仅是logcat抓log,就又不复现了。。。这真是我碰到的最玄学的问题了。

然后我去仪器那里看了下,伪基站捕捉到的上行通话数据就是一条直线,看起来确实像是无声问题,我猜测应该和响度没啥关系,应该就是无声了。

然后我就蹲在实验室里面吭哧吭哧的抓log,终于发现了必现路径:

  • 1.adb shell logcat > D:\log_first 开始抓取
  • 2.通话(此时通话正常)
  • 3.Ctrl-c取消logcat抓取(通话不挂断)
  • 4.等待几秒
  • 5.继续adb shell logcat > D:\log_second抓取log
  • 6.此时通话异常就复现问题了
    而且我发现亮屏时问题就不复现,只有息屏时问题才复现(天知道,就这一句话,花费了我多少心力)

这题和亮灭屏有什么关系呢?

查看log_second这份log发现:

AudioUSBPhoneCallController: speechULThread(), proxy_read failed, ret -1, fail due to cannot read stream data: Streams pipe error, writeTimes 1249, fill mute data
AudioUSBPhoneCallController: speechULThread(), proxy_read failed, ret -1, fail due to cannot read stream data: Streams pipe error, writeTimes 1250, fill mute data
AudioUSBPhoneCallController: speechULThread(), proxy_read failed, ret -1, fail due to cannot read stream data: Streams pipe error, writeTimes 1251, fill mute data

看来确实是通话无声,和增益啥的响度没关系,是通话UL没有从数字耳机拿到数据,所以上行通话无声了。

进一步查看kernel log:

[ 2915.631642]  (1)[18169:usb_call_ul]usb 1-1: start in data endpoint #81
[ 2916.152638]  (2)[18169:usb_call_ul]usb 1-1: stop in data endpoint #81
[ 2916.162986] -(2)[18169:usb_call_ul]usb 1-1: start in data endpoint #81
[ 2916.644130]  (4)[18169:usb_call_ul]usb 1-1: stop in data endpoint #81
[ 2916.654690] -(4)[18169:usb_call_ul]usb 1-1: start in data endpoint #81
[ 2917.168865]  (4)[18169:usb_call_ul]usb 1-1: stop in data endpoint #81

发现数字耳机,USB一直在频繁连接和断开!!!

看起来是和USB有很大关系,然后我把问题进展同步给USB的同事之后,天杀的!他居然知道这个问题!!!
USB那边表示:手机端作为host,插入otg后,息屏之后,系统会持有wake_lock导致系统不进休眠,所以为了降低系统功耗,改成了息屏之后,系统不再持有wake_lock锁,系统会进入休眠。

所以我说怎么log里面一直频繁断开USB!!!

之后尝试把USB补丁回退或者使用

echo test > /sys/power/wake_lock

做持锁试验,问题不在复现,得到解决。

唉,又给人背锅了,太惨了,最后解决方案是在通话时在Audio HAL里加锁,保证系统不会休眠,补丁验证通过,这个问题终于告一段落了。

Android音频子系统(八)------数字耳机通话无声问题解析相关推荐

  1. Android音频子系统(十四)------耳机杂音问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. 背景介绍: [前提条件]OPPO的模拟有线耳机 [操作步骤]打开全民K歌进行任意一首音乐K歌的时候 [实际结果]耳机里面有滋滋的杂音 [期望结果]耳机里面 ...

  2. Android音频子系统(十二)------抖音直播功耗问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. [前提条件] 移动卡纯5G,120HZ,最小亮度,最小音量,开启定位 [操作步骤] 1.从软件商店下载最新版本APK 2.进入抖音并登录账号,点击右上方的 ...

  3. Android音频子系统(五)------AudioFlinger处理流程

    你好!这里是风筝的博客, 欢迎和我一起交流. AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(Playback ...

  4. Android音频子系统(九)------数字耳机功耗问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. 其实我们知道,在手机里面,除了相机和整机性能,还有一个用户最关键的地方:功耗. 功耗一直是用户在意的地方,如果用户用手机发现耗电耗得飞起,那估计在网上能把 ...

  5. Android音频子系统(十五)------Audio调试经验

    你好!这里是风筝的博客, 欢迎和我一起交流. 两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常 ...

  6. Android音频子系统(十三)------audio音频测试工具

    你好!这里是风筝的博客, 欢迎和我一起交流. 测试音频延时的话,一般使用WALT来测试是最为准确的,他是借助了外部硬件来捕获音频信号,某宝上有卖: 就是有丢丢小贵,本打工人还是想想白嫖的法子- 谷歌有 ...

  7. Android音频子系统(十一)------耳机返听(耳返)原理实现

    你好!这里是风筝的博客, 欢迎和我一起交流. 耳返,也就是耳机返听,一般用在演唱会直播.手机K歌.KTV等场景. 例如在嘈杂的演唱环境里,通过佩戴耳返,歌手能清楚地听到伴奏和自己的声音,来鉴定自己有没 ...

  8. Android音频输出设备判断 Headset(耳机)在位状态查询

    文章目录 Audio Jack(耳机插孔) AudioDeviceInfo.TYPE_BUILTIN_SPEAKER AudioDeviceInfo.TYPE_BUILTIN_EARPIECE 判断耳 ...

  9. Android音频子系统(十)------MTK Audio录音流程代码解析

    你好!这里是风筝的博客, 欢迎和我一起交流. Android framework中的代码每个平台基本都是大同小异,只有Hal上代码才是厂商特制,每个平台都不相同,这里以MTK平台为例,记录下MTK平台 ...

最新文章

  1. 线程池的一个BUG,被我发现了
  2. selenium + python 登录页面,输入账号、密码,元素定位问题
  3. Redis-17Redis内存回收策略
  4. 2022-2028年中国医疗美容行业发展前景预测与投资战略分析报告
  5. 微软发布Azure Service Fabric Mesh公开预览版
  6. 前端学习(706):do-while案例
  7. python语言编写一个生成九宫格图片的代码_python简单实现9宫格图片实例
  8. tflite C++ API 部署分类模型
  9. java IDEA设置程序启动命令
  10. 《Sharding-JDBC》——数据库分表+数据库脱敏实现方案
  11. TAOCP-READING-1.3'-1
  12. python京东预约抢购_python 脚本实现京东抢购
  13. 阿里PaaS平台下开发建设
  14. 工程化框架之feather
  15. mailgun php 邮件发送 实例
  16. 蓝桥杯Python初级组测试题之Turtle画图2
  17. 工业互联网产业链全景图深度分析
  18. 工程经济在施工项目成本控制中应用
  19. html标签的下一级遍历,jquery属性,遍历,HTML操作方法详解
  20. MySQL数据库卸载+MySQL常用的图形化管理工具介绍

热门文章

  1. 分布式监控平台——Zabbix
  2. java使用https
  3. 动态修改legend属性
  4. 多用户商城系统如何选择客服系统?
  5. 如何运行一个BSV创世全节点
  6. 3D打印仿制艺术品是把双刃剑
  7. 【WordPress】ITVGD的WordPress安装与体验
  8. [Algorithm]九章九之一:Matrix DP
  9. ListView和Fragment
  10. 29、栈的压入、弹出序列