Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自帶音頻均衡器MusicFx分析

Android自帶音頻均衡器MusicFx分析

編輯:關於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。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+IDwvcD4KPHA+IDwvcD4KPHA+x7DV37X308O1vcHLo7o8L3A+CjxwPnN0YXR1c190IHN0YXR1cyA9ICgqbUVmZmVjdEludGVyZmFjZSktPmNvbW1hbmQobUVmZmVjdEludGVyZmFjZSw8L3A+CjxwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZENvZGUsPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRTaXplLDwvcD4KPHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENtZERhdGEsPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVNpemUsPC9wPgo8cD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmVwbHlEYXRhKTs8L3A+CjxwPtXiuPZtRWZmZWN0SW50ZXJmYWNlyse6zre9yfHKpcTYo788L3A+CjxwPtbQvOSz9s/Wwcu2z7Ljo6zWsb3Ty9HL90VGRkVDVF9DTURfR0VUX1BBUkFNLjwvcD4KPHA+MS5FZmZlY3RCdW5kbGU8L3A+CjxwPiA8aW1nIHNyYz0="/uploadfile/Collfiles/20140802/2014080209125822.png" alt="\">

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved