[gtalk-dev 0021] CVS update: gtalk

Back to archive index

galat****@lists***** galat****@lists*****
2007年 7月 12日 (木) 15:10:45 JST


Index: gtalk/main.c
diff -u gtalk/main.c:1.29 gtalk/main.c:1.30
--- gtalk/main.c:1.29	Thu Oct 19 12:26:33 2006
+++ gtalk/main.c	Thu Jul 12 15:10:45 2007
@@ -4,7 +4,7 @@
 /*                                                                   */
 /*   The code is developed by Yamashita-lab, Ritsumeikan University  */
 /*                                                                   */
-/* $Id: main.c,v 1.29 2006/10/19 03:26:33 sako Exp $                                                              */
+/* $Id: main.c,v 1.30 2007/07/12 06:10:45 sako Exp $                                                              */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -204,6 +204,7 @@
 void read_speech_file(char *);
 int read_pros_file(char *);
 int set_f0_and_power(char *);
+void update_duration();
 void abort_output();
 void text_analysis_file();
 void reset_output();
@@ -678,6 +679,7 @@
 	}
 }
 
+/* 韻律情報の書き出し */
 void setSpeechFile( char *rel, char *filename )
 {
 	strcpy( slot_Speak_stat, "PROCESSING" );
@@ -701,6 +703,7 @@
 	if( prop_Speak_stat == AutoOutput )  inqSpeakStat();
 }
 
+/* 韻律情報の読み込み */
 void setProsFile( char *rel, char *filename )
 {
 	int error;
@@ -713,6 +716,7 @@
 		if( prop_ProsFile == AutoOutput )  inqProsFile();
 
 		refresh();
+		/* prosBuf に各種パラメータを読み込む */
 		error = read_pros_file( filename );
 		if( ! error )  {
 
@@ -722,27 +726,32 @@
 
 /*		parameter_generation();		*/
 
-			init_parameter();
-			make_duration();
-			modify_duration();
-
+			init_parameter(); /* パラメータ生成の準備 */
+			make_duration(); /* 素のテキストから状態継続長を生成 */
+			modify_duration(); /* 継続長の修正(タグ処理) */
+
+			/* 音素継続長が修正されている場合は、状態継続長を
+			   計算しなおす */
+			update_duration();
+			
 			/* ここで、prosBuf のデータで音素時間長を設定する。 */
 
-			make_cumul_time();
-			modify_voice();
+			make_cumul_time(); /* 音素時間長の累積を計算 */
+			modify_voice(); /* 話者のスイッチ、αパラメータの変更(タグ処理) */
 
 			if( prop_Text_pho == AutoOutput )  inqTextPho();
 			if( prop_Speak_pho == AutoOutput )  inqSpeakPho();
 			if( prop_Text_dur == AutoOutput )  inqTextDur();
 			if( prop_Speak_dur == AutoOutput )  inqSpeakDur();
 
-			make_parameter();
+			make_parameter(); /* パラメータ生成を実行 */
 
-			modify_f0();
-			modify_power();
+			modify_f0(); /* F0の修正(タグ処理) */
+			modify_power(); /* パワーの修正(タグ処理) */
 
 /*		parameter_generation();	 ここまで	*/
 
+			/* 生成されたパラメータに対してF0とc0を更新 */
 			error = set_f0_and_power( filename );
 			if( ! error )  {
 				do_synthesis();		/* 合成波形の生成 */
Index: gtalk/make_duration.c
diff -u gtalk/make_duration.c:1.7 gtalk/make_duration.c:1.8
--- gtalk/make_duration.c:1.7	Thu Oct 19 12:27:08 2006
+++ gtalk/make_duration.c	Thu Jul 12 15:10:45 2007
@@ -5,7 +5,7 @@
 /*   (Nagoya Institute of Technology)                  */
 /*   All rights reserved                               */
 /*                                                     */
-/* $Id: make_duration.c,v 1.7 2006/10/19 03:27:08 sako Exp $                                                */
+/* $Id: make_duration.c,v 1.8 2007/07/12 06:10:45 sako Exp $                                                */
 
 #include <stdio.h>
 #include <string.h>
@@ -37,4 +37,3 @@
       m = m->next;
     }
 }
-
Index: gtalk/modify_parameter.c
diff -u gtalk/modify_parameter.c:1.19 gtalk/modify_parameter.c:1.20
--- gtalk/modify_parameter.c:1.19	Tue Nov 14 10:01:43 2006
+++ gtalk/modify_parameter.c	Thu Jul 12 15:10:45 2007
@@ -6,7 +6,7 @@
 /*   Keiichi Tokuda, Takayoshi Yoshimura, Heiga Zen    */
 /*   (Nagoya Institute of Technology)                  */
 /*   All rights reserved                               */
-/* $Id: modify_parameter.c,v 1.19 2006/11/14 01:01:43 sako Exp $                                                */
+/* $Id: modify_parameter.c,v 1.20 2007/07/12 06:10:45 sako Exp $                                                */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -416,3 +416,42 @@
 	}
 }
 
+/* prosBufの音素時間長にあわせて状態継続長を決定する */
+void update_duration(){
+	Model *m;
+	int state, p_index;
+	double rho,x,diffdur,data;
+
+	m = mhead;
+	p_index = 0;
+
+	while(1){
+	  rho = 0;
+	  x = 0;
+	  /* 音素時間長をチェック(同じなら修正なし) */
+	  if( m->phoneme->time != prosBuf.ph_dur[p_index]){ 
+	    rho = prosBuf.ph_dur[p_index] / FRAME_RATE;
+
+	    for(state=2;state <= nstate+1; state++){
+	      rho -= m->durmean[state];
+	      x += m->durvariance[state];
+	    }
+	    rho /= x;
+	    diffdur = 0;
+	    m->totalduration = 0; /* 0にもどす */
+	    for(state=2;state <= nstate +1; state++) {
+	      data = m->durmean[state] + rho * m->durvariance[state];
+	      m->duration[state] = (int)(data + diffdur + 0.5);
+	      if( m->duration[state] < 0) m->duration[state] = 0;
+	      m->totalduration += m->duration[state];
+	      diffdur += data - (float) m->duration[state];
+	    }
+	    m->phoneme->time = m->totalduration * FRAME_RATE;
+	  }
+
+	  if( m == mtail) break;	  /* 最後まで繰り返す */
+
+	  m = m->next;
+	  p_index +=1; 
+	}
+}	


Galateatalk-dev メーリングリストの案内
Back to archive index