Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

怎么样可以将pcm中的所有音频都自动切割好? #3

Open
Bonnerz opened this issue Nov 25, 2018 · 6 comments
Open

怎么样可以将pcm中的所有音频都自动切割好? #3

Bonnerz opened this issue Nov 25, 2018 · 6 comments

Comments

@Bonnerz
Copy link

Bonnerz commented Nov 25, 2018

你好,请问一下,如何把pcm文件夹中的所有音频都按照10s左右的时长切割好?运行后只是把16k_1的pcm程序切割完毕了

@Bonnerz Bonnerz closed this as completed Nov 25, 2018
@Bonnerz Bonnerz reopened this Nov 25, 2018
@panxin801
Copy link

把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。

@Bonnerz
Copy link
Author

Bonnerz commented Nov 26, 2018

把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。

对的,我后来也看到了,但是想批量读取文件夹中的pcm文件,你知道怎么修改吗?

@panxin801
Copy link

把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。

对的,我后来也看到了,但是想批量读取文件夹中的pcm文件,你知道怎么修改吗?

我在邮件给您回复了

@Bonnerz
Copy link
Author

Bonnerz commented Nov 28, 2018

把common.h中的FILE_CUT_MAX_MS (10*1000)就是10秒我记得,因为在src/main.c中把16k_1.pcm写死了,改filename这个变量就好了。

对的,我后来也看到了,但是想批量读取文件夹中的pcm文件,你知道怎么修改吗?

我在邮件给您回复了

嗯嗯,收到了

@Bonnerz
Copy link
Author

Bonnerz commented Dec 20, 2018

在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");

@fywhml
Copy link

fywhml commented Mar 22, 2024

在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");

请问能不能给我修改后的完整代码

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants