+/*
+ * Build Information
+ * Git Commit: 66c47c389123d4d655eb5b1d63b5918355f15ce7
+ * Branch: master
+ * Build Date: 2025-09-29 18:13:29
+ */
+
#ifndef _IMSL_KWS_DLL
#define _IMSL_KWS_DLL
#ifndef _IMSL_NN_COMMON
#define _IMSL_NN_COMMON
+#include <stdint.h>
+
typedef int (*imsl_nn_printf_func)(const char *format, ...);
struct AuthInfo
struct KwsConfig
{
- int min_activate_len; // æ\9c\80å°\8fæ£\80æµ\8bå¤\9aå°\91msç\9a\84æ¿\80æ´»æ\89\8dç®\97æ£\80æµ\8bå\88°å\85³é\94®è¯\8d
- int max_activate_gap; // å\85³é\94®è¯\8dæ¿\80æ´»ç\82¹æ\9c\80é\95¿æ\8c\81ç»æ\97¶é\97´ æ¯\94å¦\82 100ms æ\97¶æ£\80æµ\8bå\88°å\85³é\94®è¯\8dä½\86æ\98¯æ\9cªè¾¾å\88°æ\9c\80ç\9fé\95¿åº¦ï¼\8cç\9b´å\88°100ms + max_activate_gap è¿\99个æ\97¶é\97´ç\82¹ä½¿æ¿\80活失æ\95\88
- int active_threshold; // æ¿\80æ´»é\98\88å\80¼
+ int min_activate_len; // æ\9c\80å°\8fæ£\80æµ\8bå¤\9aå°\91msç\9a\84æ¿\80æ´»æ\89\8dç®\97æ£\80æµ\8bå\88°å\85³é\94®è¯?
+ int max_activate_gap; // å\85³é\94®è¯\8dæ¿\80æ´»ç\82¹æ\9c\80é\95¿æ\8c\81ç»æ\97¶é\97? æ¯\94å¦\82 100ms æ\97¶æ£\80æµ\8bå\88°å\85³é\94®è¯\8dä½\86æ\98¯æ\9cªè¾¾å\88°æ\9c\80ç\9fé\95¿åº¦ï¼\8cç\9b´å\88°100ms + max_activate_gap è¿\99个æ\97¶é\97´ç\82¹ä½¿æ¿\80活失æ\95?
+ int active_threshold; // æ¿\80æ´»é\98\88å\80?
- int kws_log_level; // kws logæ\89\93å\8d°æ\8e§å\88¶ï¼\8c 0 ä¸\8dæ\89\93å\8d°ï¼\8c1 INFOï¼\8c2 INFO DEBUG
+ int kws_log_level; // kws logæ\89\93å\8d°æ\8e§å\88¶ï¼?0 ä¸\8dæ\89\93å\8d°ï¼\8c1 INFOï¼? INFO DEBUG
struct AuthInfo auth_info;
};
extern imsl_nn_printf_func imsl_nn_printf;
imsl_nn_printf = printf;
-// å\88\9då§\8bå\8c\96
+// å\88\9då§\8bå\8c?
struct KwsConfig kws_conf;
kws_conf.min_activate_len = 10;
kws_conf.active_threshold = 32;
strcpy(auth_info.dmp_token, dmp_token);
auth_kws(&auth_info);
-// å\9c¨æ¯\8f次æ\8e¥æ\94¶è¯é\9f³æ\97¶è°\83ç\94¨ 注æ\84\8f å¦\82æ\9e\9cæ\98¯void* æ\88\96 int8* 的指针,长度 / 2
-// è¿\90è¡\8cç»\93æ\9d\9få\90\8eè\8e·å\8f\96kwsç\8a¶æ\80\81
+// å\9c¨æ¯\8f次æ\8e¥æ\94¶è¯é\9f³æ\97¶è°\83ç\94¨ 注æ\84\8f å¦\82æ\9e\9cæ\98¯void* æ\88?int8* 的指针,长度 / 2
+// è¿\90è¡\8cç»\93æ\9d\9få\90\8eè\8e·å\8f\96kwsç\8a¶æ\80?
run_kws(wave, chunk_size / 2);
int kws_status = kws_detect();
if (kws_status == 1) {
kws_clear();
}
-// ä¸\8d使ç\94¨kwsæ\88\96kwsæ\9a\82æ\97¶å\81\9cç\94¨æ\97¶è°\83ç\94¨
+// ä¸\8d使ç\94¨kwsæ\88\96kwsæ\9a\82æ\97¶å\81\9cç\94¨æ\97¶è°\83ç\94?
free_kws();
*/
/* example 2 配合vad使用
-// å\88\9då§\8bå\8c\96
+// å\88\9då§\8bå\8c?
struct VadConfig vad_conf;
int kws_status = init_kws(&kws_conf);
-const int chunk_size = 480; // è¿\99é\87\8cç\9a\84chunk sizeæ¯\8f次é\80\81å\85¥kwsè¯é\9f³ç\9a\84ç\82¹æ\95° 比如 30ms 就是 30 * 16
+const int chunk_size = 480; // è¿\99é\87\8cç\9a\84chunk sizeæ¯\8f次é\80\81å\85¥kwsè¯é\9f³ç\9a\84ç\82¹æ\95? 比如 30ms 就是 30 * 16
const int chunk_cache = 9; // 由于vad存在一定延时,需要cache一些chunk防止丢失头部语音
-const int cache_size = chunk_cache * chunk_size; // chunk_cache ç\9a\84å\80¼é\9c\80è¦\81æ ¹æ\8d®chunk_sizeç\9a\84å\80¼å\8f\98å\8c\96 9*480/chunk_size
+const int cache_size = chunk_cache * chunk_size; // chunk_cache ç\9a\84å\80¼é\9c\80è¦\81æ ¹æ\8d®chunk_sizeç\9a\84å\80¼å\8f\98å\8c? 9*480/chunk_size
int16_t wave_cache[cache_size] = {0}; // !!!!!!!!!注意我这边是int16_t
int prev_vad_status = 0; // 记录vad状态,只在vad刚检测到语音时使用cache语音
memcpy(wave_cache + (cache_size - chunk_size), wave + i, sizeof(int16_t) * chunk_size);
-// kwsæ\9a\82å\81\9c使ç\94¨æ\97¶
+// kwsæ\9a\82å\81\9c使ç\94¨æ\97?
free_kws();
-// vadæ\9a\82å\81\9c使ç\94¨æ\97¶
+// vadæ\9a\82å\81\9c使ç\94¨æ\97?
free_vad();
*/
+
+/*
+ * Build Information
+ * Git Commit: 66c47c389123d4d655eb5b1d63b5918355f15ce7
+ * Branch: master
+ * Build Date: 2025-09-29 18:13:30
+ */
+
#ifndef _IMSL_VAD_DLL
#define _IMSL_VAD_DLL
#include <stdint.h>
};
#endif
-// 注æ\84\8fè¿\99个å¿\85é¡»è¦\81ä¸\8eimsl_vad.hä¸ç\9a\84å®\9aä¹\89ä¸\80è\87´
+// 注æ\84\8fè¿\99个å¿\85é¡»è¦\81ä¸\8eimsl_vad.hä¸ç\9a\84å®\9aä¹\89ä¸\80è\87?
struct VadConfig
{
- int vad_log_level; // 0 ä¸\8då\90¯ç\94¨ 1 INFO 2 INFO、DEBUG
- int sil_threshold; // é\9d\99é\9f³é\98\88å\80¼ æ\8e¨è\8d\90å\80¼ 63 ï¼\880-127ï¼\89 (修改意义不大)
- int energy_threshold; // è\83½é\87\8fé\98\88å\80¼ æ\8e¨è\8d\90å\80¼ 10000
- int min_speech_length; // æ\9c\80ç\9fè¯é\9f³é\95¿åº¦ 240 ï¼\88é¡»å°\8fäº\8e rule1_min_tailing_silenceï¼\89
+ int vad_log_level; // 0 ä¸\8då\90¯ç\94? 1 INFO 2 INFO、DEBUG
+ int sil_threshold; // é\9d\99é\9f³é\98\88å\80? æ\8e¨è\8d\90å\80?63 ï¼?-127ï¼? (修改意义不大)
+ int energy_threshold; // è\83½é\87\8fé\98\88å\80? æ\8e¨è\8d\90å\80?10000
+ int min_speech_length; // æ\9c\80ç\9fè¯é\9f³é\95¿åº? 240 ï¼\88é¡»å°\8fäº\8e rule1_min_tailing_silenceï¼?
int silence_detect_length; // vad_silence_detect 接口判定的尾部静音长度, 如果不需要vad_silence_detect接口可以忽略这个参数
- int rule1_min_tailing_silence; // å¤\9aé\95¿æ\97¶é\97´æ²¡æ\9c\89æ£\80æµ\8bå\88°è¯é\9f³é\87\8dç½®VADç\8a¶æ\80\81 (ms) 480
- int rule2_min_tailing_silence; // 0-10sæ\9c\80ç\9få¤\9aå°\91é\9d\99é\9f³å\88¤å®\9aè¯é\9f³ç»\93æ\9d\9f (ms) 960
- int rule3_min_tailing_silence; // 10s以ä¸\8aæ\9c\80ç\9få¤\9aå°\91é\9d\99é\9f³å\88¤å®\9aè¯é\9f³ç»\93æ\9d\9f (ms) 960
+ int rule1_min_tailing_silence; // å¤\9aé\95¿æ\97¶é\97´æ²¡æ\9c\89æ£\80æµ\8bå\88°è¯é\9f³é\87\8dç½®VADç\8a¶æ\80?(ms) 480
+ int rule2_min_tailing_silence; // 0-10sæ\9c\80ç\9få¤\9aå°\91é\9d\99é\9f³å\88¤å®\9aè¯é\9f³ç»\93æ\9d?(ms) 960
+ int rule3_min_tailing_silence; // 10s以ä¸\8aæ\9c\80ç\9få¤\9aå°\91é\9d\99é\9f³å\88¤å®\9aè¯é\9f³ç»\93æ\9d?(ms) 960
struct AuthInfo auth_info;
};
/* 初始化vad
详细参数设置参照 imsl_vad.h
-è¿\94å\9b\9eå\80¼ ï¼\9a
- 0 å\88\9då§\8bå\8c\96失败
- 1 è¯\95ç\94¨æ¨¡å¼\8f ï¼\88æ\9c\80é\95¿30å\88\86é\92\9fï¼\89
- // 2 æ\8e\88æ\9d\83æ\88\90å\8a\9f ï¼\88å¦\82æ\9e\9cæ\8e\88æ\9d\83失败æ\8e§å\88¶å\8f°ä¼\9aæ\89\93å\8d°é\94\99误信æ\81¯ï¼\8cå\90\8cæ\97¶è½¬ä¸ºè¯\95ç\94¨æ¨¡å¼\8fï¼\89
+è¿\94å\9b\9eå\80?ï¼?
+ 0 å\88\9då§\8bå\8c\96失è´?
+ 1 è¯\95ç\94¨æ¨¡å¼\8f ï¼\88æ\9c\80é\95?0å\88\86é\92\9fï¼?
+ // 2 æ\8e\88æ\9d\83æ\88\90å\8a\9f ï¼\88å¦\82æ\9e\9cæ\8e\88æ\9d\83失败æ\8e§å\88¶å\8f°ä¼\9aæ\89\93å\8d°é\94\99误信æ\81¯ï¼\8cå\90\8cæ\97¶è½¬ä¸ºè¯\95ç\94¨æ¨¡å¼\8fï¼?
*/
int init_vad(const struct VadConfig* conf);
/* 授权vad
返回值:
- 0 å\88\9då§\8bå\8c\96失败
- 1 å\88\9då§\8bå\8c\96æ\88\90å\8a\9f
+ 0 å\88\9då§\8bå\8c\96失è´?
+ 1 å\88\9då§\8bå\8c\96æ\88\90å\8a?
*/
int auth_vad(const struct AuthInfo* auth_info);
-// è¿\90è¡\8cvadå\87½æ\95°ï¼\8cdata为16khz 16bit的pcm音频数据
-// 注æ\84\8fdata_lenæ\98¯int16_tç\9a\84data_lenï¼\8cå¦\82æ\9e\9cä¼ å\85¥u8*æ\88\96void* æ\95°æ\8d®data_lené\9c\80è¦\81 / 2
+// è¿\90è¡\8cvadå\87½æ\95°ï¼\8cdataä¸?6khz 16bit的pcm音频数据
+// 注æ\84\8fdata_lenæ\98¯int16_tç\9a\84data_lenï¼\8cå¦\82æ\9e\9cä¼ å\85¥u8*æ\88\96void* æ\95°æ\8d®data_lené\9c\80è¦?/ 2
void run_vad(const int16_t* data, int data_len);
-// è\8e·å\8f\96VADç\9a\84ç\8a¶æ\80\81
+// è\8e·å\8f\96VADç\9a\84ç\8a¶æ\80?
// 0 静音 1 语音 2 语音结束
int vad_detect();
-// è\8e·å\8f\96å°¾é\83¨é\9d\99é\9f³ç\9a\84ç\8a¶æ\80\81
-// 1 å°¾é\83¨é\9d\99é\9f³è¶\85è¿\87è§\84å®\9aæ\97¶é\95¿ï¼\8c0 å°¾é\83¨é\9d\99é\9f³æ\9cªè¶\85è¿\87è§\84å®\9aæ\97¶é\95¿
-// 注æ\84\8få¦\82æ\9e\9cè¦\81è°\83ç\94¨ vad_silence_detectï¼\8cé\9c\80è¦\81å\9c¨vad_clearå\89\8dè°\83ç\94¨
+// è\8e·å\8f\96å°¾é\83¨é\9d\99é\9f³ç\9a\84ç\8a¶æ\80?
+// 1 å°¾é\83¨é\9d\99é\9f³è¶\85è¿\87è§\84å®\9aæ\97¶é\95¿ï¼? å°¾é\83¨é\9d\99é\9f³æ\9cªè¶\85è¿\87è§\84å®\9aæ\97¶é\95?
+// 注æ\84\8få¦\82æ\9e\9cè¦\81è°\83ç\94?vad_silence_detectï¼\8cé\9c\80è¦\81å\9c¨vad_clearå\89\8dè°\83ç\94?
int vad_silence_detect();
// 清除尾部静音,调用这个函数后尾部静音长度会清0
void vad_silence_clear();
-// é\87\8dç½®VADç\9a\84ç\8a¶æ\80\81 æ¯\8f次å\9c¨vad_detect为2æ\97¶è°\83ç\94¨
+// é\87\8dç½®VADç\9a\84ç\8a¶æ\80? æ¯\8f次å\9c¨vad_detectä¸?æ\97¶è°\83ç\94?
void vad_clear();
-// é\87\8aæ\94¾VADå\86\85å\98ï¼\8cä¸\8d使ç\94¨VADæ\88\96æ\9a\82å\81\9c使ç\94¨VADæ\97¶è°\83ç\94¨
+// é\87\8aæ\94¾VADå\86\85å\98ï¼\8cä¸\8d使ç\94¨VADæ\88\96æ\9a\82å\81\9c使ç\94¨VADæ\97¶è°\83ç\94?
void free_vad();
#endif
strcpy(auth_info.dmp_token, dmp_token);
auth_vad(&auth_info);
- // æ¯\8f次è\8e·å¾\97è¯é\9f³å\90\8eè°\83ç\94¨, è¯é\9f³é\95¿åº¦æ\9c\80好å°\8fäº\8e100ms
- // wave为u8*æ\88\96void*æ\8c\87é\92\88æ\97¶é\9c\80è¦\81 / 2
+ // æ¯\8f次è\8e·å¾\97è¯é\9f³å\90\8eè°\83ç\94? è¯é\9f³é\95¿åº¦æ\9c\80好å°\8fäº?00ms
+ // wave为u8*æ\88\96void*æ\8c\87é\92\88æ\97¶é\9c\80è¦?/ 2
run_vad(wave, wave_len / 2);
int status = vad_detect();
if (status == 2) {
vad_clear();
}
- // ä¸\8d使ç\94¨æ\88\96æ\9a\82å\81\9c使ç\94¨VADæ\97¶è°\83ç\94¨
+ // ä¸\8d使ç\94¨æ\88\96æ\9a\82å\81\9c使ç\94¨VADæ\97¶è°\83ç\94?
free_vad();
-*/
\ No newline at end of file
+*/