speech-vad-demo
speech-vad-demo copied to clipboard
怎么样可以将pcm中的所有音频都自动切割好?
你好,请问一下,如何把pcm文件夹中的所有音频都按照10s左右的时长切割好?运行后只是把16k_1的pcm程序切割完毕了
把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。
把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。
对的,我后来也看到了,但是想批量读取文件夹中的pcm文件,你知道怎么修改吗?
把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。
对的,我后来也看到了,但是想批量读取文件夹中的pcm文件,你知道怎么修改吗?
我在邮件给您回复了
把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。
对的,我后来也看到了,但是想批量读取文件夹中的pcm文件,你知道怎么修改吗?
我在邮件给您回复了
嗯嗯,收到了
在src的main.c文件中改成下面的程序即可:
DIR *dirp;
struct dirent *dp;
dirp = opendir("pcm"); //打开目录指针
int res = 0;
while ((dp = readdir(dirp)) != NULL) { //通过目录指针读目录
if(strstr(dp->d_name,".pcm"))
{
char filename[100] = "pcm/";
strcat(filename,dp->d_name);
printf("%s\n", filename);
//const char filename[] = "pcm/16k_1.pcm"; // 读取的文件
//const char output_filename_prefix[] = dp->d_name; // 保存的文件名
char output_filename_prefix[20] = "";
strcat(output_filename_prefix,dp->d_name);
const char output_dir[] = "output_pcm"; // 保存的目录
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
fprintf(stderr, "%s does not exist\n", filename);
return 3;
}
simple_vad *vad = simple_vad_create();
if (vad == NULL) {
return 4;
}
FILE *fp2 = fopen(filename, "rb");
struct cut_info *cut = cut_info_create(fp2);
snprintf(cut->output_filename_prefix, sizeof(cut->output_filename_prefix), "%s",
output_filename_prefix);
snprintf(cut->output_file_dir, sizeof(cut->output_file_dir), "%s",
output_dir);
res = run(fp, vad, cut);
fclose(fp);
fclose(fp2);
simple_vad_free(vad);
cut_info_free(cut);
//printf("PROGRAM FINISH\n");
}
}
(void) closedir(dirp); //关闭目录
printf("PROGRAM FINISH\n");
return res;
然后如果是要对切割好的音频语音识别按顺序保存的话,可以在src文件夹中的file_cut.c中修改这一部分:
snprintf(cut->result_filename,sizeof(cut->result_filename), "%s/%s_%08ld-%08ld_%s.pcm",cut->output_file_dir,cut->output_filename_prefix, CAL_FRAME_BY_FRAME(cut->cut_begin_frame),CAL_FRAME_BY_FRAME(last_frame) - 1, cut->is_contain_active ? "A" : "I");
在src的main.c文件中改成下面的程序即可:
DIR *dirp; struct dirent *dp; dirp = opendir("pcm"); //打开目录指针 int res = 0; while ((dp = readdir(dirp)) != NULL) { //通过目录指针读目录 if(strstr(dp->d_name,".pcm")) { char filename[100] = "pcm/"; strcat(filename,dp->d_name); printf("%s\n", filename); //const char filename[] = "pcm/16k_1.pcm"; // 读取的文件 //const char output_filename_prefix[] = dp->d_name; // 保存的文件名 char output_filename_prefix[20] = ""; strcat(output_filename_prefix,dp->d_name); const char output_dir[] = "output_pcm"; // 保存的目录 FILE *fp = fopen(filename, "rb"); if (fp == NULL) { fprintf(stderr, "%s does not exist\n", filename); return 3; } simple_vad *vad = simple_vad_create(); if (vad == NULL) { return 4; } FILE *fp2 = fopen(filename, "rb"); struct cut_info *cut = cut_info_create(fp2); snprintf(cut->output_filename_prefix, sizeof(cut->output_filename_prefix), "%s", output_filename_prefix); snprintf(cut->output_file_dir, sizeof(cut->output_file_dir), "%s", output_dir); res = run(fp, vad, cut); fclose(fp); fclose(fp2); simple_vad_free(vad); cut_info_free(cut); //printf("PROGRAM FINISH\n"); } } (void) closedir(dirp); //关闭目录 printf("PROGRAM FINISH\n"); return res;
然后如果是要对切割好的音频语音识别按顺序保存的话,可以在src文件夹中的file_cut.c中修改这一部分:
snprintf(cut->result_filename,sizeof(cut->result_filename), "%s/%s_%08ld-%08ld_%s.pcm",cut->output_file_dir,cut->output_filename_prefix, CAL_FRAME_BY_FRAME(cut->cut_begin_frame),CAL_FRAME_BY_FRAME(last_frame) - 1, cut->is_contain_active ? "A" : "I");
请问能不能给我修改后的完整代码