Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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));
}
Exemplo n.º 3
0
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;
}