ports/quectel/core/source/modwlan.c\
ports/quectel/core/source/code128_p.c \
ports/quectel/core/source/modmask.c \
+ ports/quectel/core/source/modVad.c \
ports/quectel/core/source/machine_one_wire.c\
ports/quectel/core/source/modalipay_collection.c \
ports/quectel/core/source/modsif.c\
endif
endif
+
+$(NAME)_ARCHIVES = \
+ ports/quectel/core/source/libimslvad.a
+
ifeq ($(CONFIG_USQLITE), y)
EXTMOD_SRCS += lib/usqlite/usqlite_connection.c \
lib/usqlite/usqlite_cursor.c \
--- /dev/null
+#ifndef _IMSL_VAD_DLL
+#define _IMSL_VAD_DLL
+#include <stdint.h>
+
+struct VadConfig
+{
+ int vad_log_level; // 0 不启用 1 INFO 2 INFO、DEBUG
+ int sil_threshold; // 静音阈值 推荐值 63 (0-127) (修改意义不大)
+ int energy_threshold; // 能量阈值 推荐值 10000
+ int min_speech_length; // 最短语音长度 240 (须小于 rule1_min_tailing_silence)
+ int silence_detect_length; // vad_silence_detect 接口判定的尾部静音长度, 如果不需要vad_silence_detect接口可以忽略这个参数
+ int rule1_min_tailing_silence; // 多长时间没有检测到语音重置VAD状态 (ms) 480
+ int rule2_min_tailing_silence; // 0-10s最短多少静音判定语音结束 (ms) 960
+ int rule3_min_tailing_silence; // 10s以上最短多少静音判定语音结束 (ms) 960
+};
+
+/* 初始化vad
+详细参数设置参照 imsl_vad.h
+返回值 :
+ 0 初始化失败
+ 1 试用模式 (最长30分钟)
+ 2 授权模型 (授权失败 控制台会打印,同时转为试用模式)
+*/
+int init_vad(struct VadConfig* conf);
+
+// 运行vad函数,data为16khz 16bit的pcm音频数据
+// 注意data_len是int16_t的data_len,如果传入u8*或void* 数据data_len需要 / 2
+void run_vad(const int16_t* data, const int data_len);
+
+// 获取VAD的状态
+// 0 静音 1 语音 2 语音结束
+int vad_detect();
+
+// 获取尾部静音的状态
+// 1 尾部静音超过规定时长,0 尾部静音未超过规定时长
+// 注意如果要调用 vad_silence_detect,需要在vad_clear前调用
+int vad_silence_detect();
+
+// 清除尾部静音,调用这个函数后尾部静音长度会清0
+void vad_silence_clear();
+
+// 重置VAD的状态 每次在vad_detect为2时调用
+void vad_clear();
+
+// 释放VAD内存,不使用VAD或暂停使用VAD时调用
+void free_vad();
+
+#endif
+
+/*example :
+ #include "imsl_vad.h"
+
+ // 启用VAD时初始化
+ struct VadConfig conf;
+ conf.sil_threshold = 63;
+ conf.energy_threshold = 10000;
+ conf.min_speech_length = 240;
+ conf.silence_detect_length = 300;
+ conf.rule1_min_tailing_silence = 480;
+ conf.rule2_min_tailing_silence = 960;
+ conf.rule3_min_tailing_silence = 960;
+ conf.vad_log_level = 2;
+ init_vad(&conf);
+
+ // 每次获得语音后调用, 语音长度最好小于100ms
+ // wave为u8*或void*指针时需要 / 2
+ run_vad(wave, wave_len / 2);
+ int status = vad_detect();
+ if (status == 2) {
+ vad_clear();
+ }
+
+ // 不使用或暂停使用VAD时调用
+ free_vad();
+*/
\ No newline at end of file