Android设备启动时出现pop音

Android设备启动时出现pop音

针对Android设备上电启动过程中,出现一声pop音,或者在正常进入Android系统后,第一次点击Android应用出现的pop音。这里讨论的pop音解决方案是建立在设备硬件设计没有问题的基础之上的。

环境介绍

设立使用的声卡是WM8988,对应的Android系统版本是Android 9.0(P)。

原因定位

当出现异常的声音(pop音)需要先排除听到的pop音是什么原因导致的:系统混音出现的,还是声卡和功放的控制顺序导致的。

Android混音

TEE_SINK

需要借助Android系统的TEE_SINK功能:打开TEE_SINK功能保存Android输出音频到文件,从导出的文件看是否有异常音频(具体流程可以参考:Android音频调试)。

Android HAL层文件

也可以在Android HAL层的output stream中将声卡播放的音频导出到本地命名的二进制out.pcm文件查看是否存在异常音频(vendor/nxp-opensource/imx/alsa/tinyalsa_hal.c):

  1. adev_open_output_stream函数中:打开保存到的文件
  2. pcm_write_wrapper函数中:播放音频写入文件
  3. adev_close_output_stream函数中:结束输出后关闭文件

异常原因

从TEE_SINK和out.pcm看,第一次输出的点击音都是正常的,这说明并不是系统混音进入的杂音导致的,那么久极有可能是因为功放和声卡的开机顺序导致的:先开启了功放,然后再开启了声卡(功放开启后,开启声卡前后导致功放的电信号出现了跳变:pop音)

解决方案

确保输出通路开启顺序:先使能声卡,然后再使能功放。需要注意的是,如果声卡先使能,然后在第一次点击后,播放了点击声,但是此时如果功放还未使能的话就会出现第一次点击没有声音的情况,这就需要把握好使能顺序。

解决方案应用

  1. Android HAL层
    vendor/nxp-opensource/imx/alsa/config_wm8988.h:定义struct route_setting speaker_output_wm8988[]数组使能声卡放音routing通路
  2. ALSA声卡驱动
    (1)默认关闭功放
    (2)声卡驱动wm8988_pcm_hw_params中开启功放

猜你喜欢

转载自blog.csdn.net/CSDNmianfeixiazai001/article/details/105556509