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

Android音频通路配置全攻略:从喇叭到耳机的XML实战解析 本文深入解析Android音频通路配置的XML实战方法,涵盖从喇叭、听筒到耳机的完整音频路径设置。通过具体案例,详细讲解非二合一与二合一喇叭设计的配置差异、内核控件操作及常见无声问题的排查步骤,帮助硬件与驱动开发者快速定位并解决音频输出问题。 阅读详情
你好!这里是风筝的博客,
欢迎和我一起交流。

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

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

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

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

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

测试就和我反馈,上行响度不达标。但是主观测试没有这个问题。
mao
同样是打电话测试,主观测试不复现,客观测试就复现???这是在开玩笑吗

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

结果测试和我说了第二句话:没有log,因为一开MTKlog工具(DebugLogger)去抓log,问题就不复现了
excuse
这没有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里加锁,保证系统不会休眠,补丁验证通过,这个问题终于告一段落了。

RK3588 Android12音频疑难杂症:ES8388喇叭播音乐没声,但通话和闹钟正常?手把手教你改优先级 本文深入解析RK3588 Android12平台ES8388音频编解码器在多媒体场景下无声的故障,提供从诊断到修复的完整方案。通过调整Android音频策略引擎的优先级逻辑,解决喇叭播放音乐无声但通话正常的问题,包含详细的源码修改、编译部署步骤及多场景验证方法,助力开发者快速定位类似音频故障。 阅读详情

相关推荐

[RK3588-Android12] 音频策略深度解析:如何精准配置ES8388喇叭的多媒体播放优先级

本文深入解析了RK3588平台在Android12系统中ES8388喇叭的多媒体播放优先级配置问题。通过分析音频策略引擎的工作原理,提供了修改配置文件和框架层代码的解决方案,确保多媒体音频优先从喇叭输出而非HDMI。文章还介绍了调试技巧和性能优化建议,帮助开发者解决类似音频路由问题。

weixin_42528191的博客 315

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

你好!这里是风筝的博客, 欢迎和我一起交流。 Android framework中的代码每个平台基本都是大同小异,只有Hal上代码才是厂商特制,每个平台都不相同,这里以MTK平台为例,记录下MTK平台Hal audio音频录音代码流程。 调用大致流程如下 AudioALSAHardwa: openInputStream() AudioALSAStreamManager: openInputStream() AudioALSAStreamIn: AudioALSAStreamIn //new Audi

风筝 9902

AC695x蓝牙音频SoC开发实战:从核心特性到音频调试全解析

蓝牙音频SoC作为现代无线音频设备的核心,集成了微控制器、蓝牙射频、音频编解码和电源管理等功能,通过高度集成的单芯片方案简化了产品设计。其工作原理基于经典的蓝牙协议栈(如A2DP、HFP)和实时操作系统调度,实现稳定的音频流传输与低功耗运行。这类芯片的技术价值在于为TWS耳机、蓝牙音箱等消费电子产品提供了高性价比、低开发门槛的解决方案,广泛应用于对成本、功耗和音质有综合要求的场景。本文以恒玄AC695x系列为例,深入剖析其ARM Cortex-M4F内核、蓝牙5.0双模支持及音频子系统的设计要点,并分享开发

weixin_34297704的博客 390

关于ASoC中的aux设备及prefix(基于MTK mt6799 平台)

关于ASoC中的aux设备及prefix(基于MTK mt6799 平台) tags : audio 文章目录关于ASoC中的aux设备及prefix(基于MTK mt6799 平台)@[toc] 1 前言 最近研究了一下mtk6799平台下的音频,跟qcom比起来mtk在这块显得就非常简陋和落后了。mtk平台上对于音频最主要的工作应该是在于他们自己搞的hal层的那一套框架了,本来打算对这块做点...

whshiyun的专栏 4167

车载Audio子系统实战:从驱动调试到策略管理的系统工程

音频子系统是嵌入式系统中的关键模块,负责管理音频数据的采集、处理、路由与播放。其核心原理在于通过分层架构(应用层、框架层、本地层、HAL层、驱动层)实现硬件与软件的隔离与协同。该技术的核心价值在于高效管理并发音频流与有限硬件资源,确保低延迟、高保真与稳定输出,广泛应用于智能座舱、车载娱乐、语音交互等场景。本文聚焦车载环境,深入剖析音频策略管理与HAL实现,通过典型故障案例,详解如何系统化解决音频通路无声、杂音等工程难题,并融入多区域音频、随速增益等车载特有配置,为开发者提供从功能实现到量产交付的完整实战指南

weixin_33805992的博客 398

Android Audio框架深度解析:从AudioTrack到AAudio的低延迟优化实践

音频处理是现代移动应用开发中的核心技术之一,它涉及从数字信号到物理声波的完整转换链路。其核心原理在于通过软件框架协调硬件资源,实现多路音频流的混合、路由与同步处理。这项技术的核心价值在于平衡性能、功耗与兼容性,为音乐播放、实时通讯、游戏音效等场景提供稳定可靠的音频体验。在Android生态中,AudioFlinger作为混音引擎负责数据流转,而AudioPolicyService则扮演策略决策者的角色,共同构成了复杂的音频管理系统。本文聚焦于Android Audio框架的实战应用,深入探讨AudioTra

weixin_29189377的博客 236

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

两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常。现在都是测试开启反馈工具箱,复现问题然后抓取log,开发就对着大量log(本质还是logcat和dmesg等)查找自己需要的信息。基本通过这些关键词,就可以初步定位解决一些audio的问题了,之后的复杂问题,只能说,道阻且长…针对我目前使用的MTK平台,不过的场景也会打出不同的log,通过这些log可以快速找到问题点。

风筝 5350

保姆级教程:在RK3588 Android12上为ES8388音频芯片配置正确的AudioPolicy(避坑HDMI抢优先级)

本文深入解析了在RK3588 Android12平台上为ES8388音频芯片定制AudioPolicy的完整方案,重点解决HDMI抢占优先级导致的多媒体无声问题。通过分析Android音频策略引擎机制、Rockchip特有设备类型映射关系,提供三种技术方案(代码修改、XML配置、动态属性)及验证调试技巧,帮助开发者实现精准的音频路由控制。

weixin_42548893的博客 135

联发科芯片窃听漏洞影响全球 37% 的智能手机和物联网

联发科片上系统 (SoC) 中已披露多个安全漏洞,这些漏洞可能使威胁行为者能够提升权限并在音频处理器的固件中执行任意代码,从而有效地允许攻击者进行“大规模窃听活动” “在用户不知情的情况下。 这些缺陷的发现是以色列网络安全公司 Check Point Research 对这家台湾公司的音频数字信号处理器 ( DSP ) 单元进行逆向工程的结果,最终发现通过将它们与智能手机制造商库中存在的其他缺陷联系在一起,问题在芯片中发现的漏洞可能会导致 Android 应用程序的本地权限升级。 国际知名白帽黑客、

w3cschools的博客 503

Android音频底层核心:threadLoop_write数据写入流程与性能调优

在Android多媒体开发中,音频子系统负责将数字音频信号转换为模拟信号输出,其核心在于实时、低延迟的数据传输机制。音频数据从应用层经AudioFlinger混音处理后,需通过硬件抽象层(HAL)写入音频驱动,这一过程对时序要求极为苛刻,任何延迟都可能导致卡顿或爆音。其中,threadLoop_write函数扮演了关键角色,它作为输出线程的核心工作循环,负责将混合后的音频缓冲区数据通过AudioStreamOut接口写入HAL驱动,直接决定了音频播放的流畅度与音质。理解其数据搬运、缓冲区管理及阻塞处理原理,

weixin_33884611的博客 381

深入解析Android Qcom Audio架构:从FE/BE到ADSP的完整链路

本文深入解析了Android高通(Qcom)音频架构的核心链路。从面向应用的前端(FE)与面向硬件的后端(BE)分工讲起,详细阐述了连接两者的关键配置文件、DAI接口,以及通过共享内存与APR通信机制与ADSP交互的完整流程。文章旨在帮助系统工程师和驱动开发者理解音频数据从产生到输出的完整路径,为音频问题调试提供清晰的思路。

lstm7chronicler的博客 489

车载Audio子系统实战开发:ALSA框架与嵌入式音频驱动调试指南

ALSA(Advanced Linux Sound Architecture)是Linux系统中管理音频的核心框架,它通过提供统一的驱动模型和用户空间库,实现了对音频硬件的抽象与控制。其工作原理基于声卡驱动、PCM设备、混音器等组件,通过设备树配置硬件信息,并借助ASoC(音频子系统编解码器)层适配嵌入式平台。这一技术对于构建稳定、低延迟的音频系统至关重要,尤其在车载信息娱乐、工业控制等嵌入式场景中,能够确保多路音频流的可靠管理与高保真输出。本文聚焦车载环境下的实战开发,以NXP i.MX系列等主流SoC平

weixin_30715523的博客 343

告别‘哑巴’多媒体:在RK3588开发板上为ES8388喇叭修复Android12音频播放的完整指南

本文详细介绍了在RK3588开发板上为ES8388喇叭修复Android12音频播放问题的完整指南。从硬件电路检查到内核驱动调试,再到Android音频策略优化,提供了一套系统化的解决方案,帮助开发者解决多媒体无声问题。

weixin_42570296的博客 402

蓝牙音频安全漏洞解析:从AirPods窃听门看无线设备隐私风险

蓝牙音频协议作为现代无线音频传输的核心技术,通过无线射频实现设备间音频数据的高效传输。其工作原理基于经典的客户端-服务器架构,在连接建立后通过协议栈管理音频流的编解码与路由。这一技术的核心价值在于为用户提供了无缝的无线音频体验,但同时也引入了新的安全挑战,特别是在音频输入输出角色切换和权限管理层面。在智能耳机、移动设备等广泛应用场景中,系统层音频会话管理与蓝牙低功耗监听机制的交互,可能因权限验证逻辑缺陷导致安全边界模糊。近期备受关注的AirPods潜在窃听风险,正是此类问题的典型体现,攻击者可能利用恶意软件

weixin_30315435的博客 344

Android 13音频开发避坑指南:ASoC驱动三件套(Platform, Codec, Machine)配置详解与常见问题

本文深入解析Android 13音频开发中的ASoC框架三组件(Platform, Codec, Machine)配置技巧与常见问题排查方法。通过实战案例揭示DMA缓冲区配置、时钟同步、电源管理等关键细节,帮助开发者快速解决音频驱动开发中的典型问题,适配Android 13的严苛音频要求。

weixin_26843605的博客 355

基于CC2564x实战蓝牙HSP协议:嵌入式语音通信开发指南

蓝牙协议栈是嵌入式无线通信的核心技术之一,它定义了设备间互联互通的标准框架。其工作原理基于分层架构,从底层的射频物理层到高层的应用配置文件,共同协作实现数据传输。在嵌入式开发中,经典蓝牙协议如HSP(耳机配置文件)因其简单可靠,成为实现语音通话功能的关键技术。通过集成蓝牙协议栈,开发者可以快速为设备添加无线语音能力,这在无线对讲机、车载适配器、智能穿戴等产品中应用广泛。本文以德州仪器CC2564x蓝牙控制器为例,深入解析HSP协议的双角色实现,涵盖从环境搭建、服务器/客户端配置到核心API集成与产品化调试的

weixin_34209851的博客 424

Android AudioTrack深度解析:从模式选择到低延迟优化的完整流程与实战指南

在Android音频开发中,音频播放是基础且核心的需求,其背后涉及复杂的系统资源管理与数据流处理。理解音频播放的原理,关键在于掌握数据从应用层到硬件层的完整传输流程,包括缓冲区管理、线程调度与系统服务交互。这一流程的技术价值在于,它直接决定了音频播放的延迟、稳定性和功耗,是构建高质量音频应用(如音乐播放器、实时语音通话、游戏音效)的基石。通过深入分析AudioTrack的两种核心工作模式——静态模式与流模式,开发者可以针对不同应用场景做出最优选型,避免常见的性能陷阱。例如,静态模式适用于低延迟触发的短音效,

weixin_33766168的博客 403

Tinyalsa之mixer_ctl_set_value(十)

static int set_route_by_array_v2(struct mixer *mixer, struct route_setting *route) { struct mixer_ctl *ctl; .

Android系统攻城狮 2322
上一篇: Android音频子系统(七)------数字耳机播192KHz音乐卡顿问题解析
下一篇: Android音频子系统(九)------数字耳机功耗问题解析
风筝丶
风筝丶 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄10年 2031粉丝 144原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值