198 lines
6.1 KiB
C
198 lines
6.1 KiB
C
#ifndef __VOICE_DETECTOR_H__
|
|
#define __VOICE_DETECTOR_H__
|
|
#include "hal_aud.h"
|
|
#include "audioflinger.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* identify number of voice detector */
|
|
enum voice_detector_id {
|
|
VOICE_DETECTOR_ID_0,
|
|
VOICE_DETECTOR_QTY,
|
|
};
|
|
|
|
#if defined(CHIP_BEST2300P)
|
|
#define VAD_BUFFER_LEN 8192
|
|
#else
|
|
#define VAD_BUFFER_LEN 2048
|
|
#endif
|
|
|
|
/* commands of voice detector */
|
|
enum voice_detector_cmd {
|
|
VOICE_DET_CMD_IDLE,
|
|
VOICE_DET_CMD_EXIT,
|
|
VOICE_DET_CMD_VAD_OPEN,
|
|
VOICE_DET_CMD_VAD_START,
|
|
VOICE_DET_CMD_VAD_STOP,
|
|
VOICE_DET_CMD_VAD_CLOSE,
|
|
VOICE_DET_CMD_AUD_CAP_START,
|
|
VOICE_DET_CMD_AUD_CAP_STOP,
|
|
VOICE_DET_CMD_AUD_CAP_OPEN,
|
|
VOICE_DET_CMD_AUD_CAP_CLOSE,
|
|
VOICE_DET_CMD_SYS_CLK_32K,
|
|
VOICE_DET_CMD_SYS_CLK_26M,
|
|
VOICE_DET_CMD_SYS_CLK_52M,
|
|
VOICE_DET_CMD_SYS_CLK_104M,
|
|
};
|
|
|
|
/* state of voice detector */
|
|
enum voice_detector_state {
|
|
VOICE_DET_STATE_IDLE = VOICE_DET_CMD_IDLE,
|
|
VOICE_DET_STATE_EXIT = VOICE_DET_CMD_EXIT,
|
|
VOICE_DET_STATE_VAD_OPEN = VOICE_DET_CMD_VAD_OPEN,
|
|
VOICE_DET_STATE_VAD_START = VOICE_DET_CMD_VAD_START,
|
|
VOICE_DET_STATE_VAD_STOP = VOICE_DET_CMD_VAD_STOP,
|
|
VOICE_DET_STATE_VAD_CLOSE = VOICE_DET_CMD_VAD_CLOSE,
|
|
VOICE_DET_STATE_AUD_CAP_START = VOICE_DET_CMD_AUD_CAP_START,
|
|
VOICE_DET_STATE_AUD_CAP_STOP = VOICE_DET_CMD_AUD_CAP_STOP,
|
|
VOICE_DET_STATE_AUD_CAP_OPEN = VOICE_DET_CMD_AUD_CAP_OPEN,
|
|
VOICE_DET_STATE_AUD_CAP_CLOSE = VOICE_DET_CMD_AUD_CAP_CLOSE,
|
|
VOICE_DET_STATE_SYS_CLK_32K = VOICE_DET_CMD_SYS_CLK_32K,
|
|
VOICE_DET_STATE_SYS_CLK_26M = VOICE_DET_CMD_SYS_CLK_26M,
|
|
VOICE_DET_STATE_SYS_CLK_52M = VOICE_DET_CMD_SYS_CLK_52M,
|
|
VOICE_DET_STATE_SYS_CLK_104M = VOICE_DET_CMD_SYS_CLK_104M,
|
|
};
|
|
|
|
/* running mode of voice detector */
|
|
enum voice_detector_mode {
|
|
VOICE_DET_MODE_ONESHOT,
|
|
VOICE_DET_MODE_EXEC_CMD,
|
|
VOICE_DET_MODE_LOOP,
|
|
};
|
|
|
|
/* callback type of voice detector */
|
|
enum voice_detector_cb_id {
|
|
VOICE_DET_CB_PREVIOUS,
|
|
VOICE_DET_CB_RUN_WAIT,
|
|
VOICE_DET_CB_RUN_DONE,
|
|
VOICE_DET_CB_POST,
|
|
VOICE_DET_CB_ERROR,
|
|
VOICE_DET_CB_APP,
|
|
VOICE_DET_FIND_APP,
|
|
VOICE_DET_NOT_FIND_APP,
|
|
VOICE_DET_CB_QTY,
|
|
};
|
|
|
|
/* callback function definition */
|
|
typedef void (*voice_detector_cb_t)(int current_state, void *arguments);
|
|
|
|
/* VAD default parameters */
|
|
#define VAD_DEFAULT_UDC 0x1//0xa
|
|
#define VAD_DEFAULT_UPRE 0x4
|
|
#define VAD_DEFAULT_SENSOR_FRAME_LEN 8 // 1.6K sample rate
|
|
#define VAD_DEFAULT_MIC_FRAME_LEN 0x50 // 16K sample rate
|
|
#define VAD_DEFAULT_MVAD 0x7
|
|
#define VAD_DEFAULT_DIG_MODE 0x1
|
|
#define VAD_DEFAULT_PRE_GAIN 0x4
|
|
#define VAD_DEFAULT_STH 0x10
|
|
#define VAD_DEFAULT_DC_BYPASS 0x0
|
|
#define VAD_DEFAULT_FRAME_TH0 0x32
|
|
#define VAD_DEFAULT_FRAME_TH1 0x1f4
|
|
#define VAD_DEFAULT_FRAME_TH2 0x1388
|
|
#define VAD_DEFAULT_RANGE0 0xf
|
|
#define VAD_DEFAULT_RANGE1 0x32
|
|
#define VAD_DEFAULT_RANGE2 0x96
|
|
#define VAD_DEFAULT_RANGE3 0x12c
|
|
#define VAD_DEFAULT_PSD_TH0 0x0
|
|
#define VAD_DEFAULT_PSD_TH1 0x07ffffff
|
|
|
|
/*
|
|
* open voice detector specified by a unique id
|
|
* must be callbed firstly
|
|
* return: 0(success) !0(fail)
|
|
*/
|
|
int voice_detector_open(enum voice_detector_id id, enum AUD_VAD_TYPE_T vad_type);
|
|
|
|
/*
|
|
* configure VAD by specified structure conf
|
|
* Optional be called because of voice detector will initial vad by default parameter
|
|
* return: 0(success) !0(fail)
|
|
*/
|
|
int voice_detector_setup_vad(enum voice_detector_id id, struct AUD_VAD_CONFIG_T *conf);
|
|
|
|
/*
|
|
* setup capture(or playback) stream to voice detector. The capture stream will
|
|
* be used to open or start audio device.
|
|
* must be called before voice_detector_run();
|
|
* return: 0(success) !0(fail)
|
|
*/
|
|
int voice_detector_setup_stream(enum voice_detector_id id,
|
|
enum AUD_STREAM_T stream_id, struct AF_STREAM_CONFIG_T *stream);
|
|
|
|
/*
|
|
* setup callback function to voice detector. This callback function will be called
|
|
* when voice_detector_run() starts.
|
|
* parameters:
|
|
* func_id: callback type id
|
|
* func: callback fuction
|
|
* param: the arguments of callback function.
|
|
* return: 0(success) !0(fail)
|
|
*/
|
|
|
|
int voice_detector_setup_callback(enum voice_detector_id id,
|
|
enum voice_detector_cb_id func_id, voice_detector_cb_t func, void *param);
|
|
|
|
/*
|
|
* query the status of voice detector. Before send any command to voice detector
|
|
* by invoke voice_detector_send_cmd(), the status should be queried by this
|
|
* function.
|
|
* return: the state of voice detector
|
|
*/
|
|
enum voice_detector_state voice_detector_query_status(enum voice_detector_id id);
|
|
|
|
/*
|
|
* receive data from voice detector's VAD buffer.
|
|
* return: The number of bytes received from VAD private buffer
|
|
*/
|
|
int voice_detector_recv_vad_data(enum voice_detector_id id,
|
|
uint8_t *pbuf, uint32_t buf_size);
|
|
/*
|
|
* send commands to voice detector. These commands will be saved in a queue
|
|
* before they are executed exactly.
|
|
* return: 0(success) !0(fail)
|
|
*/
|
|
int voice_detector_send_cmd(enum voice_detector_id id, enum voice_detector_cmd cmd);
|
|
|
|
/*
|
|
* send commands array to voice detector. These commands will be saved in a queue
|
|
* before they are executed exactly.
|
|
* return: 0(success) !0(fail)
|
|
*/
|
|
int voice_detector_send_cmd_array(enum voice_detector_id id, int *cmd_array, int num);
|
|
|
|
int voice_detector_enhance_perform(enum voice_detector_id id);
|
|
|
|
/*
|
|
* This function is a special subrotine which should be invoked by a thread
|
|
* It will execute these commands stored in a queue.
|
|
* parameters:
|
|
* id: voice detector identify number
|
|
* continous:
|
|
* 2: This function will not return until the VOICE_DET_EXIT_CMD be sent
|
|
* 1: This function will not return until the cmd queue is empty
|
|
* 0: This function just execute only once.
|
|
* return: 0(success) !0(error)
|
|
*/
|
|
int voice_detector_run(enum voice_detector_id id, int continous);
|
|
|
|
/*
|
|
* close a voice detector specified by a unique id.
|
|
*/
|
|
void voice_detector_close(enum voice_detector_id id);
|
|
|
|
/*
|
|
* get vad data info by a unique id.
|
|
*/
|
|
void voice_detector_get_vad_data_info(enum voice_detector_id id, struct CODEC_VAD_BUF_INFO_T* vad_buf_info);
|
|
|
|
#ifdef VD_TEST
|
|
void voice_detector_test(void);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|