SSTAR_VAD算法使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 03/27/2024 |
1. 概述¶
1.1. 算法说明¶
语音活动检测算法(Voice Activity Detection, VAD)算法是对通过对输入语音进行处理,检测当前输入是否有语音活动的功能。
2. API 参考¶
API名称 | 功能 |
---|---|
IaaVad_GetBufferSize | 获取VAD算法运行需要的内存大小 |
IaaVad_Init | 初始化VAD算法 |
IaaVad_Config | 设置VAD算法参数 |
IaaVad_Run | VAD算法处理 |
IaaVad_Free | 释放VAD算法资源 |
IaaVad_SetMode | VAD运行模式设定 |
2.1. IaaVad_GetBufferSize¶
-
功能
获取VAD算法运行所需要的内存大小。
-
语法
unsigned int IaaVad_GetBufferSize(void);
-
形参
参数名称 描述 输入/输出 N/A -
返回值
返回值为VAD算法运行所需要的内存大小。
-
依赖
-
头文件: AudioVadProcess.h
-
库文件: libVAD_LINUX.so/ libVAD_LINUX.a
-
-
注意
该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。
-
举例
请参考IaaVad_Run举例部分。
2.2. IaaVad_Init¶
-
功能
初始化VAD算法。
-
语法
VAD_HANDLE IaaVad_Init(char* const working_buffer_address, VadInit *vad_init);
-
形参
参数名称 描述 输入/输出 working_buffer_address VAD算法使用的内存地址 输入 vad_init VAD算法的初始化结构体指针 输入 -
返回值
非NULL:成功。
NULL:失败。
-
依赖
-
头文件: AudioVadProcess.h
-
库文件: libVAD_LINUX.so/ libVAD_LINUX.a
-
-
举例
请参考IaaVad_Run举例部分。
2.3. IaaVad_Config¶
-
功能
设置VAD算法参数。
-
语法
int IaaVad_Config(VAD_HANDLE handle, VadConfig *vad_config);
-
形参
参数名称 描述 输入/输出 handle VAD算法handle 输入 vad_config VAD算法参数设置结构体 输入 -
返回值
0:成功。
非0:失败
-
依赖
-
头文件: AudioVadProcess.h
-
库文件: libVAD_LINUX.so/ libVAD_LINUX.a
-
-
举例
请参考IaaVad_Run举例部分。
2.4. IaaVad_Run¶
-
功能
VAD算法处理函数。
-
语法
int IaaVad_Run(VAD_HANDLE handle, short* pss_audio_in);
-
形参
参数名称 描述 输入/输出 handle 算法handle 输入 pss_audio_in 输入数据指针 输入 -
返回值
0:成功。无检测到语音活动。
1:成功。有检测到语音活动。
其他值:失败。
-
依赖
-
头文件: AudioVadProcess.h
-
库文件: libVAD_LINUX.so/ libVAD_LINUX.a
-
-
举例
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "AudioVadProcess.h" int main(int argc, char *argv[]) { short input[1024]; char input_file[512]; int mode = 1; FILE * fin; int ret1; int PN=128; VAD_HANDLE handle; VadInit vad_init; VadConfig vad_config; char *working_buf_ptr = (char*)malloc(IaaVad_GetBufferSize()); vad_init.point_number = PN; vad_init.channel = 1; vad_init.sample_rate = IAA_VAD_SAMPLE_RATE_8000; vad_config.vote_frame = 100; vad_config.sensitivity = VAD_SEN_MID; handle = IaaVad_Init((char *)working_buf_ptr, &vad_init); if(handle==NULL) { printf("VAD init error\r\n"); return -1; } else { printf("VAD init succeed\r\n"); } if(IaaVad_Config(handle, &vad_config) == -1) { printf("Config Error!"); return -1; } if(IaaVad_SetMode(handle, mode) == -1) { printf("Config Error!"); return -1; } sprintf(input_file,"%s","./../sample/data/merge_test3.wav"); fin = fopen(input_file, "rb"); if(!fin) { printf("the input file %s could not be open\n",input_file); return -1; } fread(input, sizeof(char), 44, fin); // read header 44 bytes while(fread(input, sizeof(short), vad_init.point_number*vad_init.channel, fin)) { ret1 = IaaVad_Run(handle, input); if(ret1 < 0) { printf("Error occured in Voice Activity Detection\n"); break; } } IaaVad_Free(handle); free(working_buf_ptr); fclose(fin); printf("Done\n"); return 0; }
2.5. IaaVad_Free¶
-
功能
释放VAD算法的资源。
-
语法
int IaaVad_Free(VAD_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle VAD算法handle 输入 -
返回值
0:成功。
非0:失败。
-
依赖
-
头文件: AudioVadProcess.h
-
库文件: libVAD_LINUX.so/ libVAD_LINUX.a
-
-
注意
- 必须先调用IaaVad_Free,再释放供VAD算法所使用的内存。
-
举例
请参考IaaVad_Run举例部分。
2.6. IaaVad_SetMode¶
-
功能
VAD算法运行模式设定。
-
语法
int IaaVad_SetMode((VAD_HANDLE handle, int mode);
-
形参
参数名称 描述 输入/输出 handle VAD算法handle 输入 mode 不同的VAD算法。 01为不同的传统侦测人声算法。23为使用深度学习的人声侦测方式 输入 -
返回值
0:成功。
非0:失败。
-
依赖
-
头文件: AudioVadProcess.h
-
库文件: libVAD_LINUX.so/ libVAD_LINUX.a
-
-
举例
请参考IaaVad_Run举例部分。
3. VAD 数据类型¶
VAD模块相关数据类型定义如下:
数据类型 | 定义 |
---|---|
IAA_VAD_SAMPLE_RATE | VAD算法的测采样率类型 |
VadSensitivity | VAD算法的灵敏度类型 |
VadInit | VAD算法初始化数据结构体类型 |
VadConfig | VAD算法参数设置结构体类型 |
VAD_HANDLE | VAD算法句柄类型 |
3.1. IAA_VAD_SAMPLE_RATE¶
-
说明
定义VAD算法的测采样率类型。
-
定义
typedef enum {
IAA_VAD_SAMPLE_RATE_8000 = 8000 ,
IAA_VAD_SAMPLE_RATE_16000 = 16000 ,
IAA_VAD_SAMPLE_RATE_48000 = 48000
}IAA_VAD_SAMPLE_RATE;
-
成员
成员名称 描述 IAA_VAD_SAMPLE_RATE_8000 采样率8000Hz IAA_VAD_SAMPLE_RATE_16000 采样率16000Hz IAA_VAD_SAMPLE_RATE_48000 采样率48000Hz -
注意事项
无。
-
相关数据类型及接口
3.2. VadSensitivity¶
-
说明
定义VAD算法的灵敏度类型。
-
定义
typedef enum {
VAD_SEN_LOW,
VAD_SEN_MID,
VAD_SEN_HIGH
} VadSensitivity;
-
成员
成员名称 描述 VAD_SEN_LOW 低灵敏度, 较不容易发报 VAD_SEN_MID 中灵敏度 VAD_SEN_HIGH 高灵敏度, 较容易发报 -
注意事项
无。
-
相关数据类型及接口
3.3. VadInit¶
-
说明
定义VAD算法的初始化参数类型。
-
定义
typedef struct {
unsigned int point_number;
unsigned int channel;
IAA_VAD_SAMPLE_RATE sample_rate;
}VadInit;
-
成员
成员名称 描述 point_number VAD算法处理一次的采样点数 channel 通道数 sample_rate 采样率,目前支持8k/16k/48k -
注意事项
无。
-
相关数据类型及接口
3.4. VadConfig¶
-
说明
定义VAD算法的配置参数结构体类型。
-
定义
typedef struct{
unsigned int vote_frame;
VadSensitivity sensitivity;
}VadInit;
-
成员
成员名称 描述 vote_frame 在 mode 0 下,最终估算结果所需长度,即延迟帧数。其他模式不受此参数影响。 sensitivity 灵敏度设置 -
相关数据类型及接口
3.5. VAD_HANDLE¶
-
说明
定义VAD算法的句柄类型。
-
定义
typedef void* VAD_HANDLE;
-
成员
成员名称 描述 N/A -
注意事项
无。
-
相关数据类型及接口