补充文件
authorp15692025051 <846603105@qq.com>
Thu, 12 Jun 2025 03:51:24 +0000 (11:51 +0800)
committerp15692025051 <846603105@qq.com>
Thu, 12 Jun 2025 03:51:24 +0000 (11:51 +0800)
2.sdk/Helios_SDK/services/microPython/microPython.mk
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/imsl_vad.h [new file with mode: 0644]
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/libimslvad.a [new file with mode: 0644]

index 0578ed3..6a3e7bc 100644 (file)
@@ -294,6 +294,7 @@ QPY_SRCS = \
         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\
@@ -317,6 +318,10 @@ QPY_SRCS += ../../components/quecsdk/cloud/python/modquecIot.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 \
diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/imsl_vad.h b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/imsl_vad.h
new file mode 100644 (file)
index 0000000..04afa01
--- /dev/null
@@ -0,0 +1,75 @@
+#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
diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/libimslvad.a b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/libimslvad.a
new file mode 100644 (file)
index 0000000..e8c15e2
Binary files /dev/null and b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/libimslvad.a differ