SSTAR_VAD算法使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 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:成功。

      非0:失败。

    • 依赖

      • 头文件: 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_setCallbackFunc((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
    • 注意事项

      无。

    • 相关数据类型及接口

      VadInit

    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 高灵敏度, 较容易发报
    • 注意事项

      无。

    • 相关数据类型及接口

      VadConfig

    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
    • 注意事项

      无。

    • 相关数据类型及接口

      IaaVad_Init

    3.4. VadConfig

    • 说明

      定义VAD算法的配置参数结构体类型。

    • 定义

      typedef struct{

       unsigned int vote_frame;

      VadSensitivity sensitivity;

      }VadInit;

    • 成员

      成员名称 描述
      vote_frame 在 mode 0 下,最终估算结果所需长度,即延迟帧数。其他模式不受此参数影响。
      sensitivity 灵敏度设置
    • 相关数据类型及接口

      IaaVad_Config

    3.5. VAD_HANDLE