程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> audio-android musicFx裡的音效是如何起作用的?

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一些類,更具體的過程還有待分析,不過對於上面問題的解答到這裡可以暫時完成了。以上是個人的整理結果,如果大家有更好的結果,歡迎分享啊。問題也許太寬泛了,只好自己來結束問題了。

.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved