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_tstatus=(*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. 利用HTML5开发Android
  2. Android横竖屏切换总结
  3. Android学习札记15:对Android中View绘制流程的一些理解
  4. Android深入浅出之Surface
  5. Android(安卓)AsyncTask
  6. Android中调用Unity3D探索
  7. 屏和竖屏切换是否调用Activity生命周期在mainfest.xml配置androi
  8. Android(安卓)Activity生命周期是如何实现的
  9. Android(安卓)的Camera架构介绍

随机推荐

  1. android通过图片名称获取资源识别码
  2. android中使用static、application、本地
  3. Android G711A编解码
  4. android银行卡操作步骤
  5. ANDROID音频系统散记之四:4.0音频系统HAL
  6. 常用adb命令
  7. Android - 详情页面【仿】淘宝App
  8. JS调用Android、Ios原生控件
  9. Android 自定义可拖拽,可放大缩小的ImageV
  10. Android里can't resolve symbol 问题