Android自带音频均衡器MusicFx分析

 种种原因,我要简单分析一个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分析相关推荐

  1. android8.1上musicfx,Android自带音频均衡器MusicFx分析

    Android自带音频均衡器MusicFx分析 种种原因,我要简单分析一个Android中built-in的音频均衡器MusicFx.重点是它的默认值的来历.网上很少有文章讲了这个的除了这篇<c ...

  2. Android Audio常用音频工具和分析方法

    1. linux driver部分 使用android系统录音工具tinycap来抓取底层pcm音频. tinycap 使用方法: tinycap file.wav [-D card] [-d dev ...

  3. Android 音频源码分析——AudioTrack设备选择

    Android 音频源码分析--AndroidRecord录音(一) Android 音频源码分析--AndroidRecord录音(二) Android 音频源码分析--AndroidRecord音 ...

  4. Android多媒体学习八:调用Android自带的音频录制程序,实现录制

    Android中有自带的音频录制程序,我们可以通过指定一个Action为MediaStore.Audio.Media.RECORD_SOUND_ACTION的Intent来 启动它就可以了.然后在on ...

  5. Android 音频源码分析——AndroidRecord录音(一)

    Android 音频源码分析--AndroidRecord录音(一) Android 音频源码分析--AndroidRecord录音(二) Android 音频源码分析--AndroidRecord音 ...

  6. android音频声调,Android自定义带拼音音调Textview

    本文实例为大家分享了Android自定义带拼音音调Textview的具体代码,供大家参考,具体内容如下 1.拼音textview,简单的为把拼音数组和汉字数组结合在一起多行显示 import andr ...

  7. audio unity 加速_浅谈Unity中Android、iOS音频延迟

    在Unity上面做音游,当在移动端实机运行起来,会发现,音频的发出会有一定的延迟,无论是长音效还是短音效,Unity内置的Audio内部使用的是FMOD,有以下手段改善 通过设置稍微改善其延迟的问题 ...

  8. Android P的音频架构(二)

    Android P的音频策略分析 本文主要讲解AudioPolicy部分,对音频策略流程的分析,音频策略代码在frameworks\av\services\audiopolicy中. 相关定义: fr ...

  9. Android自带语音播报+讯飞语音播报封装(直接用)

    一.Android自带的语音播报 1.查看是否支持中文,在测试的设备中打开'设置' -->找到 '语言和输入法'-->查看语音选项,是否支持中文,默认仅支持英文. 使用如下: public ...

最新文章

  1. 增加一个dbe连接_pogo pin连接器是如何解决振动的问题?
  2. java通过ftp方式上传_通过FTP以Java方式上传文件
  3. python编码与存储读取数据(数组字典)
  4. elasticSearch6源码分析(2)模块化管理
  5. html新增伪类,CSS3新增的伪类有哪些 与 居中div的多种方法
  6. spring中的IOC和AOP
  7. 向shell脚本中传入参数
  8. Net-DataGridView
  9. mysql 阿里云 版本_阿里云虚拟主机mysql已经支持版本切换,支持MySQL 5.7.25
  10. Linux源码下Makefile详解(参照Documentation\kbuild\makefiles.txt和资料)-转
  11. Cisco/华为 远程管理设备telnet的N种设置方法
  12. python处理excel的优势-用Python读写Excel文件的方式比较
  13. 【转】HDC,CDC,CWindowDC,CClientDC,CPaintDC等等
  14. 让hammer完美支持Pixi.js - 2D webG库
  15. 基于片内Flash的提示音播放程序
  16. 高速内部总线HSIB和设备总线DB
  17. 最近看的电影综艺推荐
  18. ebc是什么意思_亚马逊EBC是什么有什么用,该如何操作?
  19. MARC21与CNMARC对应关系
  20. 从业编程生涯十年,你要了解的程序员养生之道,以及进阶之路。

热门文章

  1. STM32烧录程序失败
  2. 汇编课程设计:汽车小鸟动画
  3. Q1.UNITY2019设置中文
  4. java修改图章图片_Java 处理PDF图章(印章)——图片图章、动态图章
  5. 厨房搭建好了,我们要开始做菜了!
  6. C#-FindWindow的用法
  7. VS2010 英文正式版官方下载
  8. 【iOS】史上最全的iOS持续集成教程 (上)
  9. 计算机电缆电压实验,DJYPVP1*2*1.5计算机电缆
  10. 普通计算机非专业证,办理全国普通高校非计算机专业大学生计算机等级考试(CCT)证书的通知...