ESP ADF是乐鑫推出的开源音频处理框架,是在ESP IDF框架之上。ADF由主要由三个基本的部分组成:Element、Pipeline、Event Interface。ADF中最基础的单元是element,两个element之间靠stream(也是element中的一种)传数据,整个音频流组成一个pipeline,由Event来触发控制整个音频的状态。

Element
Element元素是ADF处理音频的最小单元。每个编码器、解码器、滤波器、输入流和输出流等都是一个元素的实例。每个Element都是一个独立任务。ADF中包含了声学前端中所设计的算法:声学回声消除(AEC)、噪声抑制(NS)、自动增益控制(AGC)等独立的音频处理元素element。他们属于算法流。共有七种回调函数来处理Element元素(如下),但不是每种实例都需要定义每个回调函数,根据需求定义即可。
open:音频元素初始化阶段的回调,用于资源分配(如缓冲区创建);seek:音频数据定位时触发,常见于进度调整、跳播场景;process:核心数据处理回调,如解码、混音等业务逻辑执行;close:音频元素关闭时的回调,用于释放临时资源;destroy:音频元素销毁时触发,释放所有关联资源(如内存、句柄);read/write:数据读写阶段的回调,用于数据输入(如从 SD 卡读取)或输出(如写入 I2S 设备)。
Pipeline通过链表方式实现,element和stream是基于task实现的,通过FreeRTOS自带的队列、信号量等机制实现数据的传输和消息的传递。
Pipeline是一系列element和stream的动态组合。每个元素都通过环形缓冲区连接。
Event Interface时间接口用于流水线中的音频元素element之间建立通信。该API基于FreeRTOS队列构建。它用监听器来监听出入的消息,并通过回调函数通知他们。
Audio Common音频公共组件,主要用于定义音频元素element类型、编解码器codecs类型和格式以及流stream类型。
1030

被折叠的 条评论
为什么被折叠?



