一、软件架构设计
1. 架构层次
Java框架层:提供基础的AudioEffect控制类,不应该直接使用AudioEffect父类,而是使用具体音效实现的子类。
C/C++ Native层:主要实现层,包含关键组件:
• EffectModule:封装第三方音效引擎实现,控制process()/command()调用,管理音效状态机
• EffectHandle:IEffect接口的具体实现,提供参数更新和状态跟踪
• EffectChain:管理音效与audio session之间的关系
2. 核心组件关系
三者关系类似于MVC模式:
• EffectModule = Model(音效实现的抽象)
• EffectHandle = Control(音效操作的抽象)
• EffectChain = View(音效关系的展示)
3. 回调机制
通过effect_callback_t函数指针进行状态通知:
typedefvoid(*effect_callback_t)(int32_t event,void*user,void*info);事件类型:
• EVENT_CONTROL_STATUS_CHANGE:控制权变更
• EVENT_ENABLE_STATUS_CHANGED:启用/禁用状态变化
• EVENT_PARAMETER_CHANGE:参数更新
• EVENT_ERROR:Media Server进程异常
4. 音效实现接口
第三方音效库需要实现audio_effect_library_t结构:
typedef struct audio_effect_library_s{uint32_t tag;uint32_t version;constchar*name;constchar*implementor;int32_t(*create_effect)(consteffect_uuid_t*uuid,...);int32_t(*release_effect)(effect_handle_t handle);int32_t(*get_descriptor)(consteffect_uuid_t*uuid,...);}audio_effect_library_t;5. 关键数据结构
• audio_buffer_t:定义音效输入输出数据格式
• effect_param_t:定义音效间通信协议
- 初始化流程
AudioEffect构造函数调用native_setup进行初始化,通过AudioFlinger创建音效实例。