Android內建音頻均衡器MusicFx分析

來源:互聯網
上載者:User

標籤:android

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的預設值也找到了,但是這終究是軟體實現的,使用軟體實現來解決硬體問題我覺得是很不妥當,不過我也藉此機會瞭解了整個流程和預設值的位置。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.