当前位置:网站首页>关于es8316的音频爆破音的解决
关于es8316的音频爆破音的解决
2022-07-06 04:38:00 【永不秃头的程序员】
最近在项目中遇到了一个关于播放音频前后,喇叭会产生 哒 的一声,目前没有找到真正原因,但是可以做软件规避。
一、规避思路
对喇叭的功放角进行控制,在使用喇叭之前打开功放角,在使用完喇叭过后关闭功放角,这样就可以规避这种声音的出现。
二、相关代码
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
边栏推荐
- Visio draws Tai Chi
- Unity screen coordinates ugui coordinates world coordinates conversion between three coordinate systems
- How does computer nail adjust sound
- 11. Intranet penetration and automatic refresh
- Dry goods collection | Vulkan game engine video tutorial
- win10电脑系统里的视频不显示缩略图
- RTP GB28181 文件测试工具
- VPP性能测试
- English Vocabulary - life scene memory method
- 1291_ Add timestamp function in xshell log
猜你喜欢
Sqlserver query results are not displayed in tabular form. How to modify them
Basic explanation of turtle module - draw curve
Introduction to hashtable
Fuzzy -- basic application method of AFL
Fedora/REHL 安装 semanage
Digital children < daily question> (Digital DP)
Ue5 small knowledge points to enable the setting of lumen
Data processing methods - smote series and adasyn
Redis —— Redis In Action —— Redis 实战—— 实战篇一 —— 基于 Redis 的短信登录功能 —— Redis + Token 的共享 session 应用— 有代码
题解:《单词覆盖还原》、《最长连号》、《小玉买文具》、《小玉家的电费》
随机推荐
C. The third problem
CADD course learning (7) -- Simulation of target and small molecule interaction (flexible docking autodock)
C. The Third Problem(找规律)
How does computer nail adjust sound
Jd.com 2: how to prevent oversold in the deduction process of commodity inventory?
Solutions: word coverage restoration, longest serial number, Xiaoyu buys stationery, Xiaoyu's electricity bill
Fedora/rehl installation semanage
Visio draws Tai Chi
Complete list of common functions of turtle module
Ue5 small knowledge freezerendering view rendered objects in the cone
canal同步mysql数据变化到kafka(centos部署)
[Zhao Yuqiang] deploy kubernetes cluster with binary package
P2102 floor tile laying (DFS & greed)
VNCTF2022 WriteUp
也算是學習中的小總結
P2102 地砖铺设(dfs&贪心)
SharedPreferences source code analysis
解决“C2001:常量中有换行符“编译问题
Fedora/REHL 安装 semanage
Crawler notes: improve data collection efficiency! Use of proxy pool and thread pool