当前位置:网站首页>关于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
边栏推荐
- Patent | subject classification method based on graph convolution neural network fusion of multiple human brain maps
- SQL注入漏洞(MSSQL注入)
- P2022 interesting numbers (binary & digit DP)
- 捷码赋能案例:专业培训、技术支撑,多措并举推动毕业生搭建智慧校园毕设系统
- Yyds dry goods inventory OSI & tcp/ip
- Word cover underline
- 【Try to Hack】john哈希破解工具
- ue5 小知识 FreezeRendering 查看视锥内渲染的物体
- NPM command -- install dependent packages -- Usage / explanation
- One question per day (Mathematics)
猜你喜欢
Fedora/rehl installation semanage
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
Patent | subject classification method based on graph convolution neural network fusion of multiple human brain maps
How does computer nail adjust sound
[05-1, 05-02, 05-03] network protocol
RTP GB28181 文件测试工具
Use sentinel to interface locally
[Zhao Yuqiang] deploy kubernetes cluster with binary package
Fedora/REHL 安装 semanage
[tomato assistant installation]
随机推荐
捷码赋能案例:专业培训、技术支撑,多措并举推动毕业生搭建智慧校园毕设系统
VNCTF2022 WriteUp
After learning classes and objects, I wrote a date class
flink sql 能同时读多个topic吗。with里怎么写
Patent | subject classification method based on graph convolution neural network fusion of multiple human brain maps
win10电脑系统里的视频不显示缩略图
Is the mode of education together - on campus + off campus reliable
I'd like to ask about the current MySQL CDC design. In the full volume phase, if a chunk's binlog backfill phase,
1008 circular right shift of array elements (20 points)
[detailed steps of FreeRTOS shift value for the first time]
JVM garbage collector concept
C. The Third Problem(找规律)
Implementation of knowledge consolidation source code 2: TCP server receives and processes half packets and sticky packets
11. Intranet penetration and automatic refresh
hashlimit速率控制
解决“C2001:常量中有换行符“编译问题
View workflow
P3500 [POI2010]TES-Intelligence Test(二分&离线)
力扣(LeetCode)186. 翻转字符串里的单词 II(2022.07.05)
During pycharm debugging, the view is read only and pause the process to use the command line appear on the console input