audio-android musicFx里的音效是如何起作用的?

问题描述

android musicFx里的音效是如何起作用的?
在android 2.3版本或更高的版本中有一个musicFx应用,用于设置音效,音乐播放器music或设置中均有设置音效界面的入口,设置的值通过Sharepreference保存在data/data/com.android.musicFx这个目录下,我的问题是系统是如何读到这些值的?在哪个类读的?对于最后的是混音工作我知道一定是在audioFlinger里完成,很想知道是怎么到那里的?还请高手解答,说下思路也可以。

解决方案

以下的#号全部当成下划线, 非代码段中的“_”这个识别不出来,一个小bug。
前面的回答 这个Intent AudioEffect.ACTION_GET_PARAM只能获取一些参数,如果只想获得数据是可以用的,不过在源码只看到接收的receiver 并没有看到发送这个Intent的例子。
对于我的问题更关心的是下面的流程:当界面调节seekbar改变具体音效大小的时候会触发下面两个函数,先getParameter后setParameter,

 public int setParameter(byte[] param byte[] value)  throws IllegalStateException {            checkState(""setParameter()"");            return native_setParameter(param.length param value.length value); } public int getParameter(byte[] param byte[] value)  throws IllegalStateException {            checkState(""getParameter()"");            return native_getParameter(param.length param value.length value);}

setParameter方法里会调用native_setParameter,通过JNI会来到

audio_media_AUdioEffect.cpp  {""native_setParameter""(I[BI[B)I""    (void*)android_media_AudioEffect_native#setParameter}

在这个android_media_AudioEffect#native_setParameter函数里会找到下面这个

mIEffect->command(EFFECT_CMD_SET_PARAM sizeof (effect_param_t) + psize param &size &param->status); 而 mIEffect的由iEffect赋值,而iEffect初始化代码如下,  iEffect = audioFlinger->createEffect(getpid() (effect_descriptor_t *)&mDescriptor            mIEffectClient priority io mSessionId &mStatus &mId &enabled);  

这样我们就把界面上的值送到audioFlinger,后面还要涉及到EffectHandle,EffectModule一些类,更具体的过程还有待分析,不过对于上面问题的解答到这里可以暂时完成了。以上是个人的整理结果,如果大家有更好的结果,欢迎分享啊。问题也许太宽泛了,只好自己来结束问题了。

.

解决方案二:
你可以试试startActivityForresult(new Intent(""AudioEffect.ACTION_GET_PARAM"") reqid);
然后返回值里面有你需要的参数。

时间: 2024-09-17 03:31:06

audio-android musicFx里的音效是如何起作用的?的相关文章

安卓-android studio里OnClickListener的一个问题

问题描述 android studio里OnClickListener的一个问题 为何导入不进去? 解决方案 android.view.View.OnClickListener api:http://www.android-doc.com/reference/android/view/View.OnClickListener.html 解决方案二: 大小写错误,on修改为小写. 解决方案三: OnClickListener. 驼峰命名法哈. 解决方案四: 你把click改成Click试试

android虚拟机里程序一直停止运行

问题描述 android虚拟机里程序一直停止运行 ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=edu.nuist.zhangtong.baiduMap/.LoginActivity } logcat: 01-05 00:06:04.698: D/dalvikvm(1225): Not late-enabling Check

安装在两个两个android handset里的相同的程序如何通信?

问题描述 安装在两个两个android handset里的相同的程序如何通信? 我想检测两个android handset里安装的相同的程序,但是我不知道如何使用任何web service. 如果我知道接收者的电话号码能行吗? 或者还有什么好的方法呢?

android布局里如何实现类似html文字链接效果,我现在有的是两个Button,比较丑,有凸起感

问题描述 android布局里如何实现类似html文字链接效果,我现在有的是两个Button,比较丑,有凸起感 类似支付宝的,管理手势密码和其它用户登录这样的效果,可以点击链接到其它页面. 解决方案 使用html文本,然后让TextView的属性加下划线. Spanned ss = Html.fromHtml(CommentText); setMovementMethod(LinkMovementMethod.getInstance()); 解决方案二: to forlong401:不需要下划线

怎么在android手机里,导入3ds的文件啊?

问题描述 怎么在android手机里,导入3ds的文件啊?用eclipse开发 解决方案 解决方案二:关注,请问有结果了吗?解决方案三:必须对3DS格式有些了解,使用Opengl来显示.解决方案四:现在可以了,用了一个引擎,看着里面的demo改一下就可以jpct

android gridview里面点击事件

问题描述 android gridview里面点击事件 gridview的一个item布局里面有3个点击事件android:onClick="tock_on" android:onClick="tock_off" android:onClick="search",怎么实现对他们的操作呢? 解决方案 http://kandy0619.blog.163.com/blog/static/643443452010021101343213/ 解决方案二:

如何测试 Android Service 里的 Singleton (2)

本文讲的是如何测试 Android Service 里的 Singleton (2), 上一篇文章介绍了如何测试单例模式(PowerMock!),还有如何对 Android 代码做单元测试(Robolectric!).现在我们想要测试一个 Service 中的单例应该会很容易了吧? 第一次尝试: 结合 PowerMock 和 Robolectric (1) // src/PushService // [PushService.java] public class PushService exte

获取android手机里的所有应用,点击并响应

 在此我写一个找到android手机里的所有已装应用程序(android手机自带的也行),点击某个应用时,将做出响应 . 先看一下效果图:   当点击<愤怒的小鸟>时,将打开<愤怒的小鸟>这个游戏 main.xml的源代码如下: view plaincopy to clipboardprint? <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:andr

如何测试 Android Service 里的 Singleton (1)

本文讲的是如何测试 Android Service 里的 Singleton (1), 最近我遇到个大麻烦:如何测试服务里的单例模式?最终我解决了这个问题.而且我觉得整个解决问题的过程是一个绝好的向读者清楚的解释单元测试的机会.限于篇幅,本文是第一篇文章,后面我会再写一篇. 我们的服务 // [PushService.java] public class PushService extends Service { public void onMessageReceived(String id,