极简的音频采集、渲染、3A(AGC AEC ANS VAD)一体处理封装库:
音频3A处理(AEC、AGC、ANS)是实时互动领域无法绕开的问题。其中AEC处理与音频的采集、渲染紧密相关,三者的合理耦合对AEC效果影响很大,这也对开发者提出了更高的要求。为了简化上层业务的工作量,我们将音频采集、渲染、3A处理封装成一体库,对外提供非常易用的接口。该库具备以下特点:
- 1、AEC尽量往底层靠,不受网络传输过程中的抖动、丢包等因素影响。
- 2、基于Webrtc AEC(AEC\AECM可选,默认AEC)
- 3、支持8KHZ、16KHZ、32KHZ、44.1KHZ、48KHZ,支持单声道、双声道。
- 4、支持AEC自动延时估计。
- 5、仅5个API,仅一个DLL组成,占用空间小,无第三方依赖,集成简易。
- 6、C++开发,支持C、C++、C#,性能强劲
####单独3A处理库(不集成采集、渲染)的见:https://github.com/waterfoxfox/Audio3AProcess
- 创建SD3ACapRenderProcess对象
@param: outputPath:日志文件输出的目录,若目录不存在将自动创建
@param: outputLevel:日志输出的级别,只有等于或者高于该级别的日志输出到文件
@return: 返回模块指针,为NULL则失败
void*SD3ACapRender_New
(const char* outputPath, int outputLevel);;
- 销毁SD3ACapRenderProcess对象
@param pp3AProcess: 模块指针指针
@return:
voidSD3ACapRender_Delete
(void** pp3AProcess);
- 开始启动SD3ACapRenderProcess处理,即开始采集和3A处理,并支持渲染播放
@param p3AProcess: 模块指针
@param nCapDeviceID: 采集音频设备ID,-1为默认设备
@param nRenderDeviceID: 音频渲染设备ID,-1为默认设备
@param nSampleRate: 输入待处理数据采样率
@param nChannelNum: 输入待处理数据声道数
@param bEnableAec: 是否使能AEC
@param bEnableAgc: 是否使能AGC,多方互动时建议关闭AGC获得更好的AEC效果
@param bEnableAns: 是否使能ANS
@param bEnableVad: 是否使能VAD
@param pfOutput3ACallback: 经过3A处理后的音频采集数据输出回调接口
@param pObject: 上述输出回调接口的透传指针,将通过回调函数形参方式透传外层
@return: TURE成功,FALSE失败
BOOLSD3ACapRender_Start
(void* p3AProcess, int nCapDeviceID, int nRenderDeviceID, int nSampleRate, int nChannelNum, BOOL bEnableAec, BOOL bEnableAgc, BOOL bEnableAns, BOOL bEnableVad, Output3AProcessedCaptureData pfOutput3ACallback, void* pObject);
- 停止SD3ACapRenderProcess处理
@param p3AProcess: 模块指针
@return:
voidSD3ACapRender_Stop
(void* p3AProcess);
- 播放数据,要求采样率、声道数与创建时一致
@param p3AProcess: 模块指针
@param pucData: 待播放数据
@param nLen: 待播放数据大小
@return: 实际播放数据大小
intSD3ACapRender_Play
(void* p3AProcess, unsigned char *pucData, int nLen);