我想从音频缓冲区捕获音频波形帧,我发现 android.media.audiofx.Visualizer 可以做这样的事情,但它只能返回部分和低质量的音频内容
我发现 android.media.audiofx.Visualizer 将调用 android4.0 \ frameworks \ base \ media \ libeffects中的函数 Visualizer_command(VISUALIZER_CMD_CAPTURE) \可视化
我发现函数 Visualizer_process 会使音频内容质量下降。我想重写 Visualizer_process ,并希望找到谁将调用 Visualizer_process ,但我无法从Android源代码中找到调用者,任何人都可以帮助我吗?
非常感谢!
答案 0 :(得分: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);
mEffectInterface
是effect_handle_t
,是effect_interface_s**
。 effect_interface_s
结构(已定义here)包含许多函数指针(process
,command
,...)。这些是在加载效果时用指针填充实际效果的函数。效果通过结构提供这些指针(在EffectVisualizer
中gVisualizerInterface
)。
请注意,不同Android版本之间这些功能的确切位置可能有所不同。因此,如果您正在查看Android 4.0,您可能会在AudioFlinger.cpp(或其他地方)中找到其中一些。