语音算法对接
概述
专为IoT场景打造的智能语音识别框架,为用户提供数据采集接口,LPM接口(开发中),语音识别算法接口等接口,方便后期接入云端语音识别等框架,从而解决传统硬件设备智能化的痛点。
框架图
- AP(Application Processor)主要负责应用开发,CP(coprocessor)用来通过处理主cpu的一些工作负荷来使操作提速的辅助处理器,如语音算法。
- IPC (Inter-Process Communication,异构多核通信)
- voice data:数据内容格式为micm + refn
特性
- 适用于多核soc,ap负责采集及搬送数据,cp负责离线语音识别及抛出各类事件
- 提供多种录音数据,方便对接云端语音处理及查找本地算法问题
- 提供LPM接口,方便增加低功耗管理
- 接入方式简单,最小只需实现数据采集及语音识别部分算法等接口
接口定义
ai算法初始化
voice_ops_t *voice_ai_init(voice_t *v)
初始化 ai 算法模块
参数:
- v: voice 句柄
返回值:
- 返回voice_ops_t类型的指针: 成功, NULL: 失败
typedef struct voice {
csi_kws_t *kws; /* offline alg handle */
// aui_t *aui; /* online alg handle */
DBusConnection *conn; /* DBus connection handle */
int watch_rfd;
void *watch;
voice_state_t state;
void *priv;
voice_ops_t *ops;
voice_pcm_param_t *mic_param;
voice_pcm_param_t *ref_param;
voice_param_t param;
int fake_wakeup;
int silence_tmout;
int silence_start;
volatile int task_running;
long long aec_time_stamp;
long long vad_time_stamp;
long long asr_time_stamp;
aos_sem_t sem;
dev_ringbuf_t v_ringbuf;
} voice_t;
初始化及去初始化
voice_t *voice_init(voice_evt_t cb, void *priv);
void voice_deinit(voice_t *v);
初始化 ai 算法模块
- 参数:
- cb: voice事件
- priv: 用户私有数
- v: voice 句柄
- 返回值:
- 返回voice_ops_t类型的指针: 成功, NULL: 失败
typedef void (*voice_evt_t)(void *priv, voice_evt_id_t evt_id, void *data, int len);
typedef enum {
VOICE_ASR_EVT,//asr事件
VOICE_SILENCE_EVT,//断句事件
VOICE_DATA_EVT//回流数据到达事件
} voice_evt_id_t;
voice配置参数
int voice_config(voice_t *v, voice_param_t *p);
初始化 ai 算法模块
- 参数:
- v: voice 句柄
- p: voice参数
- 返回值:
- 0: 成功 非0:失败
typedef struct {
int cts_ms;//ai算法每次数据大小,单位(ms)
int ipc_mode;//与ai算法侧的通信方式,1:ipc
} voice_param_t;
添加及配置mic(ref)
int voice_add_mic(voice_t *v, voice_pcm_param_t *p); //添加麦克风
int voice_add_ref(voice_t *v, voice_pcm_param_t *p); //添加REF
初始化 ai 算法模块
- 参数:
- v: voice 句柄
- p:pcm参数
- 返回值:
- 0: 成功 非0:失败
typedef struct {
char *pcm_name; //pcm设备名
unsigned int rate;//采样率
int sample_bits;//采样位数
int access;//是否为交错模式,0:非交错 1:交错
int channles;//通道总数
int channles_sum;//通道总数
int period_bytes;//pcm周期数据量(用户不必配置)
} voice_pcm_param_t;
启动(停止)voice
int voice_start(voice_t *v);
int voice_stop(voice_t *v);
初始化 ai 算法模块
- 参数:
- v: voice 句柄
- 返回值:
- 0: 成功 非0:失败
数据回流控制
int voice_backflow_control(voice_t *v, voice_backflow_id_t id, int flag);
数据回流控制
参数:
v: voice 句柄
id:数据类型
flag: 0:关闭回流,1:打开回流
返回值:
- 0: 成功 非0:失败
typedef enum {
VOICE_MIC_DATA,//mic数据
VOICE_REF_DATA,//ref数据
VOICE_VAD_DATA,//vad后数据
VOICE_AEC_DATA,//aec后数据
VOICE_KWS_DATA,//唤醒词音频,用于云端确认
VOCIE_BACKFLOW_DATA
} voice_backflow_id_t;