关于es8316的音频爆破音的解决


最近在项目中遇到了一个关于播放音频前后,喇叭会产生 哒 的一声,目前没有找到真正原因,但是可以做软件规避。

一、规避思路

对喇叭的功放角进行控制,在使用喇叭之前打开功放角,在使用完喇叭过后关闭功放角,这样就可以规避这种声音的出现。

二、相关代码

frameworks/av/

diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index dce34db..1b2db64 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -31,6 +31,12 @@
 #include <media/AudioUtilmtk.h>
 #endif
 
 //这里添加节点路径
+const char *SPEAKER_ENABLE_PATH = "/sys/class/gpio/gpio114/value";
+static bool stream_system_on = false;
+static bool stream_notification_on = false;
+static bool stream_music_on = false;
+static bool stream_other_on = false;
+
 namespace android {
 
 
@@ -270,8 +276,33 @@
     sp<AudioPlaybackClient> client;
     sp<AudioPolicyEffects>audioPolicyEffects;
 //打开audio的流程时候使能功放
+    FILE *fp = fopen(SPEAKER_ENABLE_PATH, "w");
+    if (fp != NULL) {
+        char buf[2] = "1";
+        if (fwrite(buf, 1, 1, fp))
+            ALOGE("%s() fwrite success", __FUNCTION__);
+        else
+            ALOGE("%s() fwrite fail", __FUNCTION__);
+        fclose(fp);
+    } else
+        ALOGE("+%s() open failed", __FUNCTION__);
+
     getPlaybackClientAndEffects(portId, client, audioPolicyEffects, __func__);
 
+    switch (client->stream) {
+        case 1: //AUDIO_STREAM_SYSTEM button sound
+            stream_system_on = true;
+            break;
+        case 3: //AUDIO_STREAM_MUSIC
+            stream_music_on = true;
+            break;
+        case 5://AUDIO_STREAM_NOTIFICATION
+            stream_notification_on = true;
+            break;
+        default:
+            stream_other_on  = true;
+    }
+
     if (audioPolicyEffects != 0) {
         // create audio processors according to stream
         status_t status = audioPolicyEffects->addOutputSessionEffects(
@@ -307,6 +338,34 @@
 
     getPlaybackClientAndEffects(portId, client, audioPolicyEffects, __func__);
 
+    switch (client->stream) {
+        case 1: //AUDIO_STREAM_SYSTEM button sound
+            stream_system_on = false;
+            break;
+        case 3: //AUDIO_STREAM_MUSIC
+            stream_music_on = false;
+            break;
+        case 5://AUDIO_STREAM_NOTIFICATION
+            stream_notification_on = false;
+            break;
+        default:
+            stream_other_on  = false;
+    }
+ //关闭audio的流程时候关闭功放
+    if ((stream_system_on == false) && (stream_music_on == false) &&
+            (stream_notification_on == false) && (stream_other_on == false)) {
+        FILE *fp = fopen(SPEAKER_ENABLE_PATH, "w");
+        if (fp != NULL) {
+            char buf[2] = "0";
+            if (fwrite(buf, 1, 1, fp))
+                ALOGE("%s() fwrite success", __FUNCTION__);
+            else
+                ALOGE("%s() fwrite fail", __FUNCTION__);
+            fclose(fp);
+        } else
+            ALOGE("+%s() open failed", __FUNCTION__);
+    }
+
     if (audioPolicyEffects != 0) {
         // release audio processors from the stream
         status_t status = audioPolicyEffects->releaseOutputSessionEffects(

device/nxp/
添加对应权限

diff --git a/init.mt8168.rc b/init.mt8168.rc
index 40ef21b..015f327 100644
--- a/init.mt8168.rc
+++ b/init.mt8168.rc
@@ -623,6 +623,10 @@
 # EEPROM
     chmod 0666 /sys/bus/i2c/devices/2-0050/eeprom
 
+# SPEAKER_ENABLE
+    chown system system /sys/class/gpio/gpio114/value
+    chmod 0666 /sys/class/gpio/gpio114/value
+
 on property:vold.decrypt=trigger_reset_main
     write /proc/bootprof "INIT:vold.decrypt=trigger_reset_main"
     setprop sys.boot_completed 0

kernel中将frameworks需要的节点申请出来

diff --git a/drivers/misc/biol_misc.c b/drivers/misc/biol_misc.c
index 6d98a60ed992..a651892d2dda 100644
--- a/drivers/misc/biol_misc.c
+++ b/drivers/misc/biol_misc.c
@@ -122,8 +122,9 @@ static int  sbc_biol_probe(struct platform_device *pdev)
    amp_en = of_get_named_gpio(np,"amp-en", 0);
    if (!gpio_is_valid(amp_en))
    {
        return -ENODEV;
    }

    gpio_request(amp_en, "amp-en");
    gpio_direction_output(amp_en, 0);
    //申请节点,后面需要改为1 不然 没有/sys/class/gpio/gpio114/ 的 direction 目录
    gpio_export(amp_en, 1);
    msleep(1);
    gpio_set_value(amp_en, 1);
    msleep(1);

// 对应的dts可以参考我之前写的,只是多了一个添加节点的工具罢了
// https://blog.csdn.net/weixin_51178981/article/details/125097672?spm=1001.2014.3001.5501
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
顺芯es8388音频手册是一本详细介绍该音频芯片的使用方法和功能的手册。该手册主要分为以下几个部分: 1. 引言:简要介绍了顺芯es8388音频芯片的基本信息和特点。包括芯片的型号、主要功能以及适用的应用场景等。 2. 芯片配置:详细介绍了芯片的硬件配置和引脚定义,包括电源接口、时钟接口、数据接口等。并说明了不同接口的功能和使用方法。 3. 芯片功能:介绍了芯片的主要功能模块,包括数字音频输入输出、音频数据解码、音频效果处理等。对每个功能模块进行了详细的说明和操作指南,帮助用户正确设置和使用。 4. 软件驱动:介绍了芯片的软件驱动开发方法和工具,包括注册表设置、API接口文档等。提供了软件驱动的下载和安装教程,帮助用户实现软件和硬件的协同工作。 5. 故障排除:列举了一些常见问题和故障,并给出了相应的解决方案。例如,芯片无法启动、音频输出异常等。帮助用户快速解决遇到的问题。 6. 总结:对整个手册进行总结,并提供了联系方式和技术支持信息,方便用户在使用过程中遇到问题时寻求帮助。 总而言之,顺芯es8388音频手册是一本为用户提供使用顺芯es8388音频芯片的详细操作指南和技术支持的手册。通过阅读和理解该手册,用户可以了解芯片的功能和使用方法,并能够正确配置和调试芯片,使其在各种应用场景下发挥最佳性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值