pure sdk for main
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
#include "vad_process.h"
|
||||
#include "typesdef.h"
|
||||
#include "osal/string.h"
|
||||
#include "osal/task.h"
|
||||
#include "osal_file.h"
|
||||
#include "custom_mem.h"
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(A, B) ((A) < (B) ? (A) : (B))
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(A, B) ((A) > (B) ? (A) : (B))
|
||||
#endif
|
||||
|
||||
void *vadInst =NULL;
|
||||
|
||||
int vad_init(int16_t vad_mode)
|
||||
{
|
||||
vadInst = WebRtcVad_Create();
|
||||
if (vadInst == NULL) return -1;
|
||||
int status = WebRtcVad_Init(vadInst);
|
||||
if (status != 0)
|
||||
{
|
||||
printf("WebRtcVad_Init fail\n");
|
||||
WebRtcVad_Free(vadInst);
|
||||
return -1;
|
||||
}
|
||||
status = WebRtcVad_set_mode(vadInst, vad_mode);
|
||||
if (status != 0)
|
||||
{
|
||||
printf("WebRtcVad_set_mode fail\n");
|
||||
WebRtcVad_Free(vadInst);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int vad_process(int16_t *buffer, uint32_t sampleRate, size_t samplesCount, int per_ms_frames)
|
||||
{
|
||||
if (!buffer) return -1;
|
||||
if (samplesCount == 0) return -1;
|
||||
// kValidRates : 8000, 16000, 32000, 48000
|
||||
// 10, 20 or 30 ms frames
|
||||
per_ms_frames = MAX(MIN(30, per_ms_frames), 10);
|
||||
size_t samples = sampleRate * per_ms_frames / 1000;
|
||||
if (samples == 0) return -1;
|
||||
int16_t *input = buffer;
|
||||
size_t nTotal = (samplesCount / samples);
|
||||
uint32_t totalVadRet = 0;
|
||||
|
||||
for (int i = 0; i < nTotal; i++)
|
||||
{
|
||||
int keep_weight = 0;
|
||||
int nVadRet = WebRtcVad_Process(vadInst, sampleRate, input, samples, keep_weight);
|
||||
if (nVadRet == -1)
|
||||
{
|
||||
printf("failed in WebRtcVad_Process\n");
|
||||
WebRtcVad_Free(vadInst);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
totalVadRet += nVadRet;
|
||||
}
|
||||
input += samples;
|
||||
}
|
||||
return totalVadRet;
|
||||
}
|
||||
|
||||
//static int16 read_data[240];
|
||||
//void vad_test(void)
|
||||
//{
|
||||
// void *in_fp = osal_fopen("infile.pcm","rb");
|
||||
// void *out_fp = osal_fopen("outfile.pcm","wb");
|
||||
//
|
||||
// int read_len = -1;
|
||||
// int32 vad_ret = 0;
|
||||
//
|
||||
// while(1)
|
||||
// {
|
||||
// read_len = osal_fread(read_data, 2, 240, in_fp);
|
||||
// if(read_len < 480)
|
||||
// break;
|
||||
// vad_ret = vad_process(read_data, 8000, 240, 30);
|
||||
// if(vad_ret != 0)
|
||||
// osal_fwrite(read_data, 2, 240, out_fp);
|
||||
// }
|
||||
// osal_fclose(in_fp);
|
||||
// osal_fclose(out_fp);
|
||||
// printf("\n*******vad test finish********\n");
|
||||
//}
|
||||
//struct os_task vad_test_task;
|
||||
//void vad_test_thread(void)
|
||||
//{
|
||||
// printf("\n**********vad_test_thread*************\n");
|
||||
// vad_init(kVadNormal);
|
||||
// OS_TASK_INIT("vad_test",&vad_test_task,vad_test,0,OS_TASK_PRIORITY_NORMAL,2048);
|
||||
//}
|
||||
Reference in New Issue
Block a user