void TextToSpeech::load( char *dn_mecab, char *fn_ms_dur, char *fn_ts_dur, char *fn_ms_mgc, char *fn_ts_mgc, char **fn_ws_mgc, int num_ws_mgc, char *fn_ms_lf0, char *fn_ts_lf0, char **fn_ws_lf0, int num_ws_lf0, char *fn_ms_lpf, char *fn_ts_lpf, char **fn_ws_lpf, int num_ws_lpf, char *fn_ms_gvm, char *fn_ts_gvm, char *fn_ms_gvl, char *fn_ts_gvl, char *fn_ms_gvf, char *fn_ts_gvf, char *fn_gv_switch) { Mecab_load(&open_jtalk_.mecab, dn_mecab); HTS_Engine_load_duration_from_fn(&open_jtalk_.engine, &fn_ms_dur, &fn_ts_dur, 1); HTS_Engine_load_parameter_from_fn(&open_jtalk_.engine, &fn_ms_mgc, &fn_ts_mgc, fn_ws_mgc, 0, FALSE, num_ws_mgc, 1); HTS_Engine_load_parameter_from_fn(&open_jtalk_.engine, &fn_ms_lf0, &fn_ts_lf0, fn_ws_lf0, 1, TRUE, num_ws_lf0, 1); if (HTS_Engine_get_nstream(&open_jtalk_.engine) == 3) HTS_Engine_load_parameter_from_fn(&open_jtalk_.engine, &fn_ms_lpf, &fn_ts_lpf, fn_ws_lpf, 2, FALSE, num_ws_lpf, 1); if (fn_ms_gvm != NULL) { if (fn_ts_gvm != NULL) HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, &fn_ms_gvm, &fn_ts_gvm, 0, 1); else HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, &fn_ms_gvm, NULL, 0, 1); } if (fn_ms_gvl != NULL) { if (fn_ts_gvl != NULL) HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, &fn_ms_gvl, &fn_ts_gvl, 1, 1); else HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, &fn_ms_gvl, NULL, 1, 1); } if (HTS_Engine_get_nstream(&open_jtalk_.engine) == 3 && fn_ms_gvf != NULL) { if (fn_ts_gvf != NULL) HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, &fn_ms_gvf, &fn_ts_gvf, 2, 1); else HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, &fn_ms_gvf, NULL, 2, 1); } if (fn_gv_switch != NULL) HTS_Engine_load_gv_switch_from_fn(&open_jtalk_.engine, fn_gv_switch); }
void TextToSpeech::load( const char *dn_mecab, const char *fn_ms_dur, const char *fn_ts_dur, const char *fn_ms_mgc, const char *fn_ts_mgc, const char **fn_ws_mgc, int num_ws_mgc, const char *fn_ms_lf0, const char *fn_ts_lf0, const char **fn_ws_lf0, int num_ws_lf0, const char *fn_ms_lpf, const char *fn_ts_lpf, const char **fn_ws_lpf, int num_ws_lpf, const char *fn_ms_gvm, const char *fn_ts_gvm, const char *fn_ms_gvl, const char *fn_ts_gvl, const char *fn_ms_gvf, const char *fn_ts_gvf, const char *fn_gv_switch) { Mecab_load(&open_jtalk_.mecab, const_cast<char *>(dn_mecab)); HTS_Engine_load_duration_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_dur), const_cast<char **>(&fn_ts_dur), 1); HTS_Engine_load_parameter_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_mgc), const_cast<char **>(&fn_ts_mgc), const_cast<char **>(fn_ws_mgc), 0, FALSE, num_ws_mgc, 1); HTS_Engine_load_parameter_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_lf0), const_cast<char **>(&fn_ts_lf0), const_cast<char **>(fn_ws_lf0), 1, TRUE, num_ws_lf0, 1); if (HTS_Engine_get_nstream(&open_jtalk_.engine) == 3) HTS_Engine_load_parameter_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_lpf), const_cast<char **>(&fn_ts_lpf), const_cast<char **>(fn_ws_lpf), 2, FALSE, num_ws_lpf, 1); if (fn_ms_gvm != NULL) { if (fn_ts_gvm != NULL) HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_gvm), const_cast<char **>(&fn_ts_gvm), 0, 1); else HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_gvm), NULL, 0, 1); } if (fn_ms_gvl != NULL) { if (fn_ts_gvl != NULL) HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_gvl), const_cast<char **>(&fn_ts_gvl), 1, 1); else HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_gvl), NULL, 1, 1); } if (HTS_Engine_get_nstream(&open_jtalk_.engine) == 3 && fn_ms_gvf != NULL) { if (fn_ts_gvf != NULL) HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_gvf), const_cast<char **>(&fn_ts_gvf), 2, 1); else HTS_Engine_load_gv_from_fn(&open_jtalk_.engine, const_cast<char **>(&fn_ms_gvf), NULL, 2, 1); } if (fn_gv_switch != NULL) HTS_Engine_load_gv_switch_from_fn(&open_jtalk_.engine, const_cast<char *>(fn_gv_switch)); }
int OpenJTalk_Create(OpenJTalk** openjtalk,Mecab* mecab,int argc,const char **argv) { /* file names of models */ char *fn_ms_dur = NULL; char *fn_ms_mgc = NULL; char *fn_ms_lf0 = NULL; char *fn_ms_lpf = NULL; /* file names of trees */ char *fn_ts_dur = NULL; char *fn_ts_mgc = NULL; char *fn_ts_lf0 = NULL; char *fn_ts_lpf = NULL; /* file names of windows */ int num_ws_mgc = 0, num_ws_lf0 = 0, num_ws_lpf = 0; /* file names of global variance */ char *fn_ms_gvm = NULL; char *fn_ms_gvl = NULL; char *fn_ms_gvf = NULL; /* file names of global variance trees */ char *fn_ts_gvm = NULL; char *fn_ts_gvl = NULL; char *fn_ts_gvf = NULL; /* file names of global variance switch */ char *fn_gv_switch = NULL; /* global parameter */ int sampling_rate = 16000; int fperiod = 80; double alpha = 0.42; int stage = 0; /* gamma = -1.0/stage */ double beta = 0.0; int audio_buff_size = 1600; double uv_threshold = 0.5; double gv_weight_mgc = 1.0; double gv_weight_lf0 = 1.0; double gv_weight_lpf = 1.0; HTS_Boolean use_log_gain = FALSE; HTS_Boolean use_lpf = FALSE; /* alloc OpenJTalk ythis pointer! */ *openjtalk = (struct OpenJTalk*)malloc(sizeof(struct OpenJTalk)); (*openjtalk)->mecab = mecab; (*openjtalk)->errorout[0] = '\0'; /* delta window handler for mel-cepstrum */ (*openjtalk)->fn_ws_mgc = (char **) calloc(argc, sizeof(char *)); /* delta window handler for log f0 */ (*openjtalk)->fn_ws_lf0 = (char **) calloc(argc, sizeof(char *)); /* delta window handler for low-pass filter */ (*openjtalk)->fn_ws_lpf = (char **) calloc(argc, sizeof(char *)); /* parse command line */ if (argc == 1) { sprintf((*openjtalk)->errorout,"option error!"); return -1; } /* read command */ while (--argc) { if (**++argv == '-') { switch (*(*argv + 1)) { case 't': switch (*(*argv + 2)) { case 'd': fn_ts_dur = (char*)*(++argv); break; case 'm': fn_ts_mgc = (char*)*(++argv); break; case 'f': case 'p': fn_ts_lf0 = (char*)*(++argv); break; case 'l': fn_ts_lpf = (char*)*(++argv); break; default: sprintf((*openjtalk)->errorout,"Invalid option '-t%c'.\n", *(*argv + 2)); return 0; } --argc; break; case 'm': switch (*(*argv + 2)) { case 'd': fn_ms_dur = (char*)*(++argv); break; case 'm': fn_ms_mgc = (char*)*(++argv); break; case 'f': case 'p': fn_ms_lf0 = (char*)*(++argv); break; case 'l': fn_ms_lpf = (char*)*(++argv); break; default: sprintf((*openjtalk)->errorout,"Invalid option '-m%c'.\n", *(*argv + 2)); return 0; } --argc; break; case 'd': switch (*(*argv + 2)) { case 'm': (*openjtalk)->fn_ws_mgc[num_ws_mgc++] = (char*)*(++argv); break; case 'f': case 'p': (*openjtalk)->fn_ws_lf0[num_ws_lf0++] = (char*)*(++argv); break; case 'l': (*openjtalk)->fn_ws_lpf[num_ws_lpf++] = (char*)*(++argv); break; default: sprintf((*openjtalk)->errorout,"Invalid option '-d%c'.\n", *(*argv + 2)); return 0; } --argc; break; case 's': sampling_rate = atoi(*++argv); --argc; break; case 'p': fperiod = atoi(*++argv); --argc; break; case 'a': alpha = atof(*++argv); --argc; break; case 'g': stage = atoi(*++argv); --argc; break; case 'l': use_log_gain = TRUE; break; case 'b': beta = atof(*++argv); --argc; break; case 'u': uv_threshold = atof(*++argv); --argc; break; case 'e': switch (*(*argv + 2)) { case 'm': fn_ts_gvm = (char*)*(++argv); break; case 'f': case 'p': fn_ts_gvl = (char*)*(++argv); break; case 'l': fn_ts_gvf = (char*)*(++argv); break; default: sprintf((*openjtalk)->errorout,"Invalid option '-e%c'.\n", *(*argv + 2)); return 0; } --argc; break; case 'c': switch (*(*argv + 2)) { case 'm': fn_ms_gvm = (char*)*(++argv); break; case 'f': case 'p': fn_ms_gvl = (char*)*(++argv); break; case 'l': fn_ms_gvf = (char*)*(++argv); break; default: sprintf((*openjtalk)->errorout,"Invalid option '-c%c'.\n", *(*argv + 2)); return 0; } --argc; break; case 'j': switch (*(*argv + 2)) { case 'm': gv_weight_mgc = atof(*(++argv)); break; case 'f': case 'p': gv_weight_lf0 = atof(*(++argv)); break; case 'l': gv_weight_lpf = atof(*(++argv)); break; default: sprintf((*openjtalk)->errorout,"Invalid option '-j%c'.\n", *(*argv + 2)); return 0; } --argc; break; case 'k': fn_gv_switch = (char*)*++argv; --argc; break; case 'z': audio_buff_size = atoi(*++argv); --argc; break; default: sprintf((*openjtalk)->errorout,"Invalid option '-%c'.\n", *(*argv + 1)); return 0; } } } /* number of models,trees check */ if (fn_ms_dur == NULL || fn_ms_mgc == NULL || fn_ms_lf0 == NULL || fn_ts_dur == NULL || fn_ts_mgc == NULL || fn_ts_lf0 == NULL || num_ws_mgc <= 0 || num_ws_lf0 <= 0) { sprintf((*openjtalk)->errorout,"Specify models (trees) for each parameter.\n"); return 0; } if (fn_ms_lpf != NULL && fn_ts_lpf != NULL && num_ws_lpf > 0) use_lpf = TRUE; /* initialize */ NJD_initialize(&(*openjtalk)->njd); JPCommon_initialize(&(*openjtalk)->jpcommon); if (use_lpf) HTS_Engine_initialize(&(*openjtalk)->engine, 3); else HTS_Engine_initialize(&(*openjtalk)->engine, 2); HTS_Engine_set_sampling_rate(&(*openjtalk)->engine, sampling_rate); HTS_Engine_set_fperiod(&(*openjtalk)->engine, fperiod); HTS_Engine_set_alpha(&(*openjtalk)->engine, alpha); HTS_Engine_set_gamma(&(*openjtalk)->engine, stage); HTS_Engine_set_log_gain(&(*openjtalk)->engine, use_log_gain); HTS_Engine_set_beta(&(*openjtalk)->engine, beta); HTS_Engine_set_audio_buff_size(&(*openjtalk)->engine, audio_buff_size); HTS_Engine_set_msd_threshold(&(*openjtalk)->engine, 1, uv_threshold); HTS_Engine_set_gv_weight(&(*openjtalk)->engine, 0, gv_weight_mgc); HTS_Engine_set_gv_weight(&(*openjtalk)->engine, 1, gv_weight_lf0); if (use_lpf) { HTS_Engine_set_gv_weight(&(*openjtalk)->engine, 2, gv_weight_lpf); } /* Load! */ HTS_Engine_load_duration_from_fn(&(*openjtalk)->engine, &fn_ms_dur, &fn_ts_dur, 1); HTS_Engine_load_parameter_from_fn(&(*openjtalk)->engine, &fn_ms_mgc, &fn_ts_mgc, (*openjtalk)->fn_ws_mgc, 0, FALSE, num_ws_mgc, 1); HTS_Engine_load_parameter_from_fn(&(*openjtalk)->engine, &fn_ms_lf0, &fn_ts_lf0, (*openjtalk)->fn_ws_lf0, 1, TRUE, num_ws_lf0, 1); if (HTS_Engine_get_nstream(&(*openjtalk)->engine) == 3) HTS_Engine_load_parameter_from_fn(&(*openjtalk)->engine, &fn_ms_lpf, &fn_ts_lpf, (*openjtalk)->fn_ws_lpf, 2, FALSE, num_ws_lpf, 1); if (fn_ms_gvm != NULL) { if (fn_ts_gvm != NULL) HTS_Engine_load_gv_from_fn(&(*openjtalk)->engine, &fn_ms_gvm, &fn_ts_gvm, 0, 1); else HTS_Engine_load_gv_from_fn(&(*openjtalk)->engine, &fn_ms_gvm, NULL, 0, 1); } if (fn_ms_gvl != NULL) { if (fn_ts_gvl != NULL) HTS_Engine_load_gv_from_fn(&(*openjtalk)->engine, &fn_ms_gvl, &fn_ts_gvl, 1, 1); else HTS_Engine_load_gv_from_fn(&(*openjtalk)->engine, &fn_ms_gvl, NULL, 1, 1); } if (HTS_Engine_get_nstream(&(*openjtalk)->engine) == 3 && fn_ms_gvf != NULL) { if (fn_ts_gvf != NULL) HTS_Engine_load_gv_from_fn(&(*openjtalk)->engine, &fn_ms_gvf, &fn_ts_gvf, 2, 1); else HTS_Engine_load_gv_from_fn(&(*openjtalk)->engine, &fn_ms_gvf, NULL, 2, 1); } if (fn_gv_switch != NULL) HTS_Engine_load_gv_switch_from_fn(&(*openjtalk)->engine, fn_gv_switch); return 1; }