Android自带音频均衡器MusicFx分析
来源:互联网 发布:星光大道2016网络赛区 编辑:程序博客网 时间:2024/05/22 17:38
种种原因,我要简单分析一个Android中built-in的音频均衡器MusicFx。重点是它的默认值的来历。网上很少有文章讲了这个的除了这篇《com.android.musicFx设置音效流程 -- 从app到AudioFlinger》。注:Android系统版本为4.2.2_r1。
从App到AudioFliger的终点是在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) 通过查看以AudioEffect为TAG的日志,可以判断是先获取的增益参数后设置的参数。
2) 类别为Normal。
终于找到了:frameworks/av/media/libeffects/lvm/wrapper/Bundle/EffectBundle.h
上边是一个参考,真正直到作用是下面那个EQNB_5BandSoftProsets。
5段分别为:50Hz/230Hz/910Hz/4kHz/14kHz.以下是将230Hz调整为-10的实验截图:
总结:研究这个MusicFx是源于设备上扬声器在某些频段增益过高导致啪啪响声(我现在还不能使用专业的语言来形容这种现象),就准备测试使用软件EQ来解决这个问题。现在EQ的默认值也找到了,但是这终究是软件实现的,使用软件实现来解决硬件问题我觉得是很不妥当,不过我也借此机会了解了整个流程和默认值的位置。
- Android自带音频均衡器MusicFx分析
- Android自带音频均衡器MusicFx分析
- android mediaEffect musicFx
- MusicFx
- android 音频均衡器,可通过拖动调节音频EQ
- Android 自带主题分析总结
- Android自带计算器源码 分析
- Android 基础代码实例:音频 均衡器 示波器 声场 等
- 电脑音频均衡器使用方法
- Android多媒体学习八:调用Android自带的音频录制程序,实现录制
- Android多媒体学习七:调用Android自带的音频录制程序,实现录制
- Android多媒体学习八:调用Android自带的音频录制程序,实现录制
- Android自带实例分析开篇---Eclipse运行android自带示例
- Android 使用intent打开手机自带应用播放视频,音频,文档,还有打开应用市场
- android自带的xml解析类分析
- Android自带的toolbox分析及扩展
- android自带musicplayer源码分析:CreatePlaylist类
- android自带musicplayer源码分析:ScanningProgress类
- Oracle--多表查询及子查询
- Android源码分析:AudioEffect
- JavaSwing组件:Jlist学习笔记
- android屏幕适配
- C Primer Plus-C语言运算优先级
- Android自带音频均衡器MusicFx分析
- Add Binary
- 【算法导论】用动态规划解活动选择问题
- 内核初始化:init/mainc之sched_init();
- [暖手][学习阶段-各路杂题][HDU-1020]Encoding
- Windows环境下32位汇编语言程序设计 读书体会
- C 关于进制
- SVM算法
- Android提供的异步类和接口