1 /*
2  * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3  */
4 #ifndef __LEFTRIGHT_DENOISE_H__
5 #define __LEFTRIGHT_DENOISE_H__
6 
7 #include <stdint.h>
8 #include "ae_macros.h"
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 typedef struct {
15     int32_t     bypass;
16     float       delay_taps;             // MIC L/R delay samples. 0: 适用于麦克距离为<2cm; 1: 适用于麦克距离为2cm左右; 2: 适用于麦克距离为4cm左右
17     int32_t     freq_smooth_enable;     // 1: 频域滤波打开; 0: 频域滤波关闭; 默认打开
18     int32_t     wnr_enable;             // wind noise reduction enable
19     int32_t     delay_enable;
20 } LeftRightDenoiseConfig;
21 
22 struct LeftRightDenoiseState_;
23 
24 typedef struct LeftRightDenoiseState_ LeftRightDenoiseState;
25 
26 #ifndef LEFTRIGHT_DENOISE_IMPL
27 #define LEFTRIGHT_DENOISE_IMPL float
28 #endif
29 
30 #define leftright_denoise_create    CONSTRUCT_FUNC_NAME(leftright_denoise, LEFTRIGHT_DENOISE_IMPL, create)
31 #define leftright_denoise_destroy    CONSTRUCT_FUNC_NAME(leftright_denoise, LEFTRIGHT_DENOISE_IMPL, destroy)
32 #define leftright_denoise_set_config CONSTRUCT_FUNC_NAME(leftright_denoise, LEFTRIGHT_DENOISE_IMPL, set_config)
33 #define leftright_denoise_process   CONSTRUCT_FUNC_NAME(leftright_denoise, LEFTRIGHT_DENOISE_IMPL, process)
34 #define leftright_denoise_get_delay   CONSTRUCT_FUNC_NAME(leftright_denoise, LEFTRIGHT_DENOISE_IMPL, get_delay)
35 
36 LeftRightDenoiseState *leftright_denoise_create(int32_t sample_rate, int32_t frame_size, const LeftRightDenoiseConfig *cfg);
37 
38 int32_t leftright_denoise_destroy(LeftRightDenoiseState *st);
39 
40 int32_t leftright_denoise_set_config(LeftRightDenoiseState *st, const LeftRightDenoiseConfig *cfg);
41 
42 int32_t leftright_denoise_process(LeftRightDenoiseState *st, short *pcm_buf, int32_t pcm_len, short *out_buf);
43 
44 int32_t leftright_denoise_get_delay(LeftRightDenoiseState *st);
45 
46 #ifdef __cplusplus
47 }
48 #endif
49 
50 #endif
51