/** * Save the current CMN vector to a file. * * @param c [i/o] CMN calculation work area * @param filename [in] filename to save the data. * * @return TRUE on success, FALSE on failure. */ boolean CMN_save_to_file(CMNWork *c, char *filename) { FILE *fp; int d; /* save in HTK ascii format */ /* open file for writing */ if ((fp = fopen_writefile(filename)) == NULL) { jlog("Error: wav2mfcc-pipe: failed to open \"%s\" to write current cepstral data\n", filename); return(FALSE); } fprintf(fp, "<CEPSNORM> <>\n"); /* unlike HTK, full mean will be written for variance estimation */ fprintf(fp, "<MEAN> %d\n", c->veclen); for(d=0;d<c->veclen;d++) { fprintf(fp, " %e\n", c->cmean_init[d]); } if (c->var) { fprintf(fp, "<VARIANCE> %d\n", c->veclen); for(d=0;d<c->veclen;d++) { fprintf(fp, " %e\n", c->cvar_init[d]); } } fclose_writefile(fp); jlog("Stat: wav2mfcc-pipe: cepstral mean"); if (c->var) jlog(" and variance"); jlog(" written to \"%s\"\n", filename); return(TRUE); }
/** * @brief Open/create a WAVE file and write header. * * Open or creat a new WAV file and prepare for later data writing. * The frame length written here is dummy, and will be overwritten when * closed by wrwav_close(). * * @param filename [in] file name * @param sfreq [in] sampling frequency of the data you are going to write * * @return the file pointer. */ FILE * wrwav_open(char *filename, int sfreq) { FILE *fp; unsigned int i; unsigned short s; /* open file for writing */ if ((fp = fopen_writefile(filename)) == NULL) return NULL; /* write header */ /* first 4 byte: 'R' 'I' 'F' 'F' */ MYWRITE("RIFF", 1, 4, fp); /* 4 byte: byte num of rest: dummy for now */ i = 0; MYWRITE(&i, 4, 1, fp); /* first part: WAVE format specifications */ /* 8 byte: 'W' 'A' 'V' 'E' 'f' 'm' 't' ' ' */ MYWRITE("WAVEfmt ", 1, 8, fp); /* 4byte: byte size of the next part (16 bytes here) */ i = 16; MYWRITE(&i, 4, 1, fp); /* 2byte: data format */ s = 1; MYWRITE(&s, 2, 1, fp); /* PCM */ /* 2byte: channel num */ s = 1; MYWRITE(&s, 2, 1, fp); /* mono */ /* 4byte: sampling rate */ i = sfreq; MYWRITE(&i, 4, 1, fp); /* 4byte: bytes per second */ i = sfreq * sizeof(SP16); MYWRITE(&i, 4, 1, fp); /* 2bytes: bytes per frame ( = (bytes per sample) x channel ) */ s = sizeof(SP16); MYWRITE(&s, 2, 1, fp); /* 2bytes: bits per sample */ s = sizeof(SP16) * 8; MYWRITE(&s, 2, 1, fp); /* data part header */ MYWRITE("data", 1, 4, fp); /* data length: dummy for now */ i = 0; MYWRITE(&i, 4, 1, fp); totallen = 0; /* reset total length */ return(fp); }
int main(int argc, char *argv[]) { FILE *fp; char *hmmdefs_file; char *hmmlist_file; char *outfile; int i; hmmdefs_file = hmmlist_file = outfile = NULL; for(i=1;i<argc;i++) { if (hmmdefs_file == NULL) { hmmdefs_file = argv[i]; } else if (hmmlist_file == NULL) { hmmlist_file = argv[i]; } else if (outfile == NULL) { outfile = argv[i]; } else { usage(argv[0]); return -1; } } if (hmmdefs_file == NULL || hmmlist_file == NULL || outfile == NULL) { usage(argv[0]); return -1; } hmminfo = hmminfo_new(); printf("---- reading hmmdefs ----\n"); printf("filename: %s\n", hmmdefs_file); /* read hmmdef file */ undef_para(¶); if (init_hmminfo(hmminfo, hmmdefs_file, hmmlist_file, ¶) == FALSE) { fprintf(stderr, "--- terminated\n"); return -1; } if (hmminfo->is_triphone) { fprintf(stderr, "making pseudo bi/mono-phone for IW-triphone\n"); if (make_cdset(hmminfo) == FALSE) { fprintf(stderr, "ERROR: m_fusion: failed to make context-dependent state set\n"); return -1; } } printf("\n------------------------------------------------------------\n"); print_hmmdef_info(stdout, hmminfo); printf("\n"); printf("------------------------------------------------------------\n"); printf("---- writing logical-to-physical mapping and pseudo phone info ----\n"); printf("filename: %s\n", outfile); if ((fp = fopen_writefile(outfile)) == NULL) { fprintf(stderr, "failed to open %s for writing\n", outfile); return -1; } if (save_hmmlist_bin(fp, hmminfo) == FALSE) { fprintf(stderr, "failed to write to %s\n", outfile); return -1; } if (fclose_writefile(fp) != 0) { fprintf(stderr, "failed to close %s\n", outfile); return -1; } printf("\n"); printf("binary HMMList and pseudo phone definitions are written to \"%s\"\n", outfile); return 0; }
int main(int argc, char *argv[]) { FILE *fp; char header[512]; time_t now; char *binfile, *lrfile, *rlfile, *outfile; int i; char *from_code, *to_code, *buf; boolean charconv_enabled = FALSE; boolean force_swap = FALSE; WORD_ID w; binfile = lrfile = rlfile = outfile = NULL; from_code = to_code = NULL; if (argc <= 1) { usage(argv[0]); return -1; } for(i=1;i<argc;i++) { if (argv[i][0] == '-') { if (argv[i][1] == 'd') { if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } binfile = argv[i]; } else if (argv[i][1] == 'n') { switch(argv[i][2]) { case 'l': if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } lrfile = argv[i]; break; case 'r': if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } rlfile = argv[i]; break; default: printf("Error: no such option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } } else if (argv[i][1] == 'c') { if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); return -1; } from_code = strcpy((char*)mymalloc(strlen(argv[i])+1), argv[i]); if (++i >= argc) { printf("Error: no argument for option \"%s\"\n", argv[i]); usage(argv[0]); free(from_code); return -1; } to_code = strcpy((char*)mymalloc(strlen(argv[i])+1),argv[i]); charconv_enabled = TRUE; } else if (argv[i][1] == 's') { force_swap = TRUE; } } else { if (outfile == NULL) { outfile = argv[i]; } else { printf("Error: more than one output file\n"); usage(argv[0]); return -1; } } } if (!outfile) { printf("Error: no output file specified\n"); usage(argv[0]); return -1; } if (binfile) { if (lrfile || rlfile) { printf("Error: both binary file and ARPA file are specified\n"); usage(argv[0]); return -1; } printf("bingram: %s\n", binfile); } else { if (rlfile) { printf("backward n-gram: %s\n", rlfile); if (lrfile) { printf("additional forward 2-gram for 1st pass: %s\n", lrfile); } } else if (lrfile) { printf("forward n-gram: %s\n", lrfile); } else { printf("Error: no input N-gram file specified\n"); usage(argv[0]); return -1; } } printf("\nSTART LOADING\n\n"); /* make header string */ now = time(NULL); if (binfile) { sprintf(header, "converted at %s\nfrom bingram = %s\n", ctime(&now), binfile); } else { if (rlfile && lrfile) { sprintf(header, "converted at %s\nfrom n-gram = %s, LR 2-gram = %s\n", ctime(&now), rlfile, lrfile); } else if (rlfile) { sprintf(header, "converted at %s\nfrom n-gram = %s\n", ctime(&now), rlfile); } else { sprintf(header, "converted at %s\nfrom n-gram = %s\n", ctime(&now), lrfile); } } ngram = ngram_info_new(); if (binfile) { /* read in bingram */ if (init_ngram_bin(ngram, binfile) == FALSE) return -1; } else { /* read in ARPA n-gram */ if (force_swap) { ngram->bos_eos_swap = TRUE; } if (rlfile) { if (init_ngram_arpa(ngram, rlfile, DIR_RL) == FALSE) return -1; if (lrfile) { if (init_ngram_arpa_additional(ngram, lrfile) == FALSE) return -1; } } else if (lrfile) { if (init_ngram_arpa(ngram, lrfile, DIR_LR) == FALSE) return -1; } } print_ngram_info(stdout, ngram); if (charconv_enabled == TRUE) { /* do character conversion */ if (charconv_setup(from_code, to_code) == -1) { fprintf(stderr, "failed to setup character convertsion\n"); return -1; } buf = (char *)mymalloc(4096); for (w = 0; w < ngram->max_word_num; w++) { charconv(ngram->wname[w], buf, 4096); ngram->wname[w] = mybmalloc2(strlen(buf)+1, &(ngram->mroot)); strcpy(ngram->wname[w], buf); } free(buf); } /* write in JULIUS binary format */ if ((fp = fopen_writefile(outfile)) == NULL) { fprintf(stderr, "failed to open \"%s\"\n", outfile); return -1; } printf("\nWriting in v5 format to \"%s\"...\n", outfile); if (ngram_write_bin(fp, ngram, header) == FALSE){/* failed */ fprintf(stderr, "failed to write \"%s\"\n",outfile); return -1; } fclose_writefile(fp); printf("completed\n"); return 0; }
int main(int argc, char *argv[]) { FILE *fp; char *infile; char *outfile; char *conffile; int i; infile = outfile = conffile = NULL; for(i=1;i<argc;i++) { if (strmatch(argv[i], "-C") || strmatch(argv[i], "-htkconf")) { if (++i >= argc) { usage(argv[0]); return -1; } conffile = argv[i]; } else { if (infile == NULL) { infile = argv[i]; } else if (outfile == NULL) { outfile = argv[i]; } else { usage(argv[0]); return -1; } } } if (infile == NULL || outfile == NULL) { usage(argv[0]); return -1; } hmminfo = hmminfo_new(); printf("---- reading hmmdefs ----\n"); printf("filename: %s\n", infile); /* read hmmdef file */ undef_para(¶); if (init_hmminfo(hmminfo, infile, NULL, ¶) == FALSE) { fprintf(stderr, "--- terminated\n"); return -1; } if (conffile != NULL) { /* if input HMMDEFS already has embedded parameter they will be overridden by the parameters in the config file */ printf("\n---- reading HTK Config ----\n"); if (para.loaded == 1) { printf("Warning: input hmmdefs has acoustic analysis parameter information\n"); printf("Warning: they are overridden by the HTK Config file...\n"); } /* load HTK config file */ undef_para(¶); if (htk_config_file_parse(conffile, ¶) == FALSE) { fprintf(stderr, "Error: failed to read %s\n", conffile); return(-1); } /* set some parameters from HTK HMM header information */ printf("\nsetting TARGETKIND and NUMCEPS from HMM definition header..."); calc_para_from_header(¶, hmminfo->opt.param_type, hmminfo->opt.vec_size); printf("done\n"); /* fulfill unspecified values with HTK defaults */ printf("fulfill unspecified values with HTK defaults..."); undef_para(¶_htk); make_default_para_htk(¶_htk); apply_para(¶, ¶_htk); printf("done\n"); } printf("\n------------------------------------------------------------\n"); print_hmmdef_info(stdout, hmminfo); printf("\n"); if (para.loaded == 1) { put_para(stdout, ¶); } printf("------------------------------------------------------------\n"); printf("---- writing ----\n"); printf("filename: %s\n", outfile); if ((fp = fopen_writefile(outfile)) == NULL) { fprintf(stderr, "failed to open %s for writing\n", outfile); return -1; } if (write_binhmm(fp, hmminfo, (para.loaded == 1) ? ¶ : NULL) == FALSE) { fprintf(stderr, "failed to write to %s\n", outfile); return -1; } if (fclose_writefile(fp) != 0) { fprintf(stderr, "failed to close %s\n", outfile); return -1; } printf("\n"); if (para.loaded == 1) { printf("binary HMM written to \"%s\", with acoustic parameters embedded for Julius.\n", outfile); } else { printf("binary HMM written to \"%s\"\n", outfile); } return 0; }