編輯:關於Android編程
種種原因,我要簡單分析一個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的默認值也找到了,但是這終究是軟件實現的,使用軟件實現來解決硬件問題我覺得是很不妥當,不過我也借此機會了解了整個流程和默認值的位置。
在上篇中我們已經實現了相機打開和實時圖像信息的獲取,那麼接下來我們可以嘗試在獲取的圖像信息進行一些處理,然後實時顯示出來,在這裡我們要完成的的幾種處理:灰化、Canny邊
安卓6.0 Marshmallow棉花糖版本雖然普及率依然可憐至極,但這並不能阻擋Google開發並推出下一個版本Android N,預計將會是
設置兩張圖片重疊的模式。在正常的情況下,在已有的圖像上繪圖將會在其上面添加一層新的形狀。如果新的Paint是完全不透明的,那麼它將完全遮擋住下面的Paint;如果它是部分
關於Dagger,在之前的博文(Android 依賴注入:Dagger 實例講解(Demo下載))中已有介紹, 本文說的Dagger 2主要是由Google