2013-12-18 49 views
0

我想從音頻緩衝區中捕捉音頻波框,我發現android.media.audiofx.Visualizer可以做這樣的事情,但它只能返回部分低質量的音頻內容誰會在Android中調用「Visualizer_process」

我發現android.media.audiofx.Visualizer將調用函數Visualizer_command(VISUALIZER_CMD_CAPTURE)的Android4.0 \框架\基地\媒體\ libeffects \可視化

我找到了功能Visualizer_process將使音頻內容質量較差。我想重寫Visualizer_process,並且想要找到誰會調用Visualizer_process,但我無法從Android源代碼中找到調用者,任何人都可以幫助我嗎?

非常感謝!

回答

2

AudioFlinger::PlaybackThread::threadLoop調用AudioFlinger::EffectChain::process_l,調用AudioFlinger::EffectModule::process,最終調用實際效果的process函數。

正如你可以看到AudioFlinger::EffectModule::process,有呼叫

int ret = (*mEffectInterface)->process(mEffectInterface, 
             &mConfig.inputCfg.buffer, 
             &mConfig.outputCfg.buffer); 

mEffectInterfaceeffect_handle_t,這是一個effect_interface_s**effect_interface_s結構(定義爲here)包含許多函數指針(processcommand,...)。當加載效果時,這些填充指針實際效果的功能。效果通過一個結構提供了這些指針(在EffectVisualizer它是gVisualizerInterface)。

請注意,這些功能的確切位置可能因Android版本的不同而有所不同。所以如果你在看Android 4.0,你可能會在AudioFlinger.cpp(或其他地方)找到它們中的一部分。

+0

感謝您的幫助。 順便說一句,你知道哪個代碼將函數「Visualizer_process(...)」映射爲「process(...)」和「Visualizer_command(...)」爲「command(...)」嗎? – Jianzhong

+0

我忘了一步。我已經更新了我的答案。 – Michael

相關問題