Android自带音频均衡器MusicFx分析

Android自带音频均衡器MusicFx分析

      种种原因,我要简单分析一个Androidbuilt-in的音频均衡器MusicFx。重点是它的默认值的来历。网上很少有文章讲了这个的除了这篇《com.android.musicFx设置音效流程 -- appAudioFlinger》。注:Android系统版本为4.2.2_r1

      从AppAudioFliger的终点是在android_media_AudioEffect.cpp(之前版本在是audio_media_AudioEffect.cpp)中的android_media_AudioEffect_native_getParameter()

 

  这里调用了AudioEffect.cpp中的getParameter().

 

最终进入AudioFlinger: 

mIEffect->command(EFFECT_CMD_GET_PARAM, sizeof(effect_param_t) + param->psize, param, &psize, param)

 


    AudioFlinger如何对这个命令进行的处理Android音频系统之AudioFlinger()Android源码分析:AudioEffect

 

 

前者调用到了:

status_t status = (*mEffectInterface)->command(mEffectInterface,

                                                   cmdCode,

                                                   cmdSize,

                                                   pCmdData,

                                                   replySize,

                                                   pReplyData);

这个mEffectInterface是何方神圣呢?

中间出现了断层,直接搜索EFFECT_CMD_GET_PARAM.

1.EffectBundle

 

2.EffectDownmix.c -> Downmix_Command

 

3.EffectEqualizer.cpp -> Equalizer_command

 

可以看到调用了Equalizer_getParameter,这个函数的原型为:

 

这和应用程序中的api就对应起来了,获取频段的增益是getBandLevel

 

返回了pContext->pBundleContext->bandGaindB[band] * 100;

 

来看看这个值有谁在设置。

源码中开启Log,在应用上使能Equalizer了 就会有输出了,但是先暂停。

1) 通过查看以AudioEffectTAG的日志,可以判断是先获取的增益参数后设置的参数。

2) 类别为Normal

终于找到了:frameworks/av/media/libeffects/lvm/wrapper/Bundle/EffectBundle.h

 

上边是一个参考,真正直到作用是下面那个EQNB_5BandSoftProsets

5段分别为:50Hz/230Hz/910Hz/4kHz/14kHz.以下是将230Hz调整为-10的实验截图:

 

总结:研究这个MusicFx是源于设备上扬声器在某些频段增益过高导致啪啪响声(我现在还不能使用专业的语言来形容这种现象),就准备测试使用软件EQ来解决这个问题。现在EQ的默认值也找到了,但是这终究是软件实现的,使用软件实现来解决硬件问题我觉得是很不妥当,不过我也借此机会了解了整个流程和默认值的位置。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

袁保康

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

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

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

打赏作者

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

抵扣说明:

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

余额充值