ルギア君の戯言

雑多な記事。

Galatea Talk + Mikutter

Galatea Talk を使って mikutter の Mention を話してもらうために。

前提注意

  • Galatea Talk は EUC アプリ (Windows 版は SJIS) のため、そのコード系にない文字は発音できない。

ダウンロード先

FixFix

まず、Galatea Talk がバグだらけのため、その fix。なお、chasen や darts は付属よりも新しいバージョンが公開されていたりしますが、付属のバージョンでなければ動きません。chaone については Java 版が付属しているが、動かないので、C++ 版をダウンロードしてインストールする。unidic も読めない漢字などに影響するのでできるだけ最新のものが望ましい (※ unidic のダウンロードはユーザー登録が必要です。)。

  1. darts
  2. chasen
  3. unidic
  4. chaone

の順でインストールする。


まずはオーディオデバイス。これはお好みで。

diff -ur galatea-v3.0/SSM/da.h galatea-v3.0.patched/SSM/da.h
--- galatea-v3.0/SSM/da.h	2003-08-21 13:49:01.000000000 +0900
+++ galatea-v3.0.patched/SSM/da.h	2012-04-21 05:48:12.148370345 +0900
@@ -18,8 +18,8 @@
 
 #ifdef LINUX
 #include <sys/soundcard.h>
-#define AUDIO_DEV    "/dev/dsp"
-#define MIXER_DEV    "/dev/mixer"
+#define AUDIO_DEV    "/dev/dsp1"
+#define MIXER_DEV    "/dev/mixer1"
 #define	MAXAMPGAIN	100
 #define DEFAULT_FREQ	16
 #endif /* LINUX */

条件が不十分。

diff -ur galatea-v3.0/SSM/make_mora.c galatea-v3.0.patched/SSM/make_mora.c
--- galatea-v3.0/SSM/make_mora.c	2003-08-21 13:49:02.000000000 +0900
+++ galatea-v3.0.patched/SSM/make_mora.c	2012-04-22 08:05:58.314343887 +0900
@@ -138,10 +138,16 @@
 {
 	MORA *mora;
 
+        if(morph == NULL) {
+           return;
+        }
+
 	/* 、の後の 「 や 、の前の 」 では、ポーズを作らない。*/
-	if( morph->hinshiID == H_KAKKO_HIRAKU &&   /* 「 など */
+	if( morph->prev != NULL && 
+                morph->hinshiID == H_KAKKO_HIRAKU &&   /* 「 など */
 		morph->prev->silence != NON )  return;
-	if( morph->hinshiID == H_KAKKO_TOJIRU &&	/* 」など */
+	if( morph->next != NULL &&
+                morph->hinshiID == H_KAKKO_TOJIRU &&	/* 」など */
 		morph->next->silence != NON )  return;
 
 	mora = new_mora();

引数不整合。

diff -ur galatea-v3.0/SSM/mlpg.c galatea-v3.0.patched/SSM/mlpg.c
--- galatea-v3.0/SSM/mlpg.c	2003-08-21 13:49:02.000000000 +0900
+++ galatea-v3.0.patched/SSM/mlpg.c	2012-04-20 22:00:19.258081645 +0900
@@ -171,7 +171,7 @@
 
 void InitDWin(PStream *pst)
 {
-	double *dcalloc (int, int);
+	double *dcalloc (int);
 	int str2darray (char *, double **);
 	register int i, j;
 	int fsize, leng;
@@ -199,7 +199,7 @@
 
   /* window for static parameter */
   pst->dw.width[0][WLEFT] = pst->dw.width[0][WRIGHT] = 0;
-  pst->dw.coef[0] = dcalloc (1, 0);
+  pst->dw.coef[0] = dcalloc (1);
   pst->dw.coef[0][0] = 1;
 
   /* set delta coefficients */
@@ -225,7 +225,7 @@
               fseek (fp, 0L, 0);
 
               /* read coefficients */
-              pst->dw.coef[i] = dcalloc (fsize, 0);
+              pst->dw.coef[i] = dcalloc (fsize);
               freadf (pst->dw.coef[i], sizeof (**(pst->dw.coef)), fsize, fp);
             }
 
@@ -250,7 +250,7 @@
             }
           pst->dw.width[i][WLEFT] = -leng;
           pst->dw.width[i][WRIGHT] = leng;
-          pst->dw.coef[i] = dcalloc (leng*2 + 1, 0);
+          pst->dw.coef[i] = dcalloc (leng*2 + 1);
           pst->dw.coef[i] += leng;
         }
 

; 忘れ。

diff -ur galatea-v3.0/SSM/modify_parameter.c galatea-v3.0.patched/SSM/modify_parameter.c
--- galatea-v3.0/SSM/modify_parameter.c	2003-08-21 13:49:02.000000000 +0900
+++ galatea-v3.0.patched/SSM/modify_parameter.c	2012-04-20 22:01:06.354082132 +0900
@@ -77,6 +77,7 @@
 				break;
 			case TA_ABSSPEED:
 			case TA_MORASEC:
+				;
 		}
 		if(phoneme == last)break;
 		phoneme = phoneme->next;
diff -ur galatea-v3.0/SSM/morph.c galatea-v3.0.patched/SSM/morph.c
--- galatea-v3.0/SSM/morph.c	2003-08-21 13:49:02.000000000 +0900
+++ galatea-v3.0.patched/SSM/morph.c	2012-04-20 22:01:57.917082654 +0900
@@ -349,6 +349,7 @@
 			break;
 		default:
 /*			ErrMsg( "Unknown option ... %s='%s'\n", attr, val );	*/
+                        ;
 		}
 /*		if( strcmp("。",kanji)==0 )  break;	*/
 	}
@@ -426,6 +427,7 @@
 			break;
 		default:
 /*			ErrMsg( "Unknown option ... %s='%s'\n", attr, val );	*/
+                        ;
 		}
 /*		if( strcmp("。",kanji)==0 )  break;	*/
 	}

この辺もお好みで。インストール先などは要注意。

diff -ur galatea-v3.0/SSM/ssm.conf galatea-v3.0.patched/SSM/ssm.conf
--- galatea-v3.0/SSM/ssm.conf	2003-08-21 14:26:59.000000000 +0900
+++ galatea-v3.0.patched/SSM/ssm.conf	2012-04-21 06:46:05.702406108 +0900
@@ -1,13 +1,13 @@
 # configuratiuon file for gtalk (GalateaTalk)
 
 # path name of 'chasen'
-CHASEN: /usr/local/chasen-2.3.3/bin/chasen
+CHASEN: /usr/bin/chasen
 
 # configuration file for 'chasen'
 CHASEN-RC: ./chasenrc
 
 # command of running 'chaone'
-CHAONE: /usr/local/bin/java -jar ../morph/chaone-1.1.0.jar
+CHAONE: /usr/chaone/chaone --encoding EUC-JP
 
 # default for numbers and alphabets
 NUMBER: DECIMAL
diff -ur galatea-v3.0/SSM/text.c galatea-v3.0.patched/SSM/text.c
--- galatea-v3.0/SSM/text.c	2003-08-21 13:49:02.000000000 +0900
+++ galatea-v3.0.patched/SSM/text.c	2012-04-21 07:31:42.283434209 +0900
@@ -107,13 +107,13 @@
 			break;
 		} else if( strncmp(line,"<S>",3)==0 )  {
 			/* do nothing */
-		} else if( strncmp(line,"<W ",3)==0 )  {
+		} else if( strncmp(line,"<cha:W ",7)==0 )  {
 			p += parse_chasen_morph( line );
-		} else if( strncmp(line,"<W1 ",4)==0 )  {
+		} else if( strncmp(line,"<cha:W1 ",8)==0 )  {
 			p += parse_chasen_morph1( line );
-		} else if( strncmp(line,"<W2 ",4)==0 )  {
+		} else if( strncmp(line,"<cha:W2 ",8)==0 )  {
 			open_chasen_compound( line );
-		} else if( strncmp(line,"</W2>",5)==0 )  {
+		} else if( strncmp(line,"</cha:W2>",9)==0 )  {
 			close_chasen_compound();
 		} else {
 			parse_tag( line, p );

Mikutter Plugin

で、Mikutter のプラグイン。あまりいいものじゃないが仕方ない。ちゃんと全部話してくれるし、mikutter 本体の制御も邪魔しない。でも、fork すると Gtk のインスタンスとかまでコピーしちゃうんだね。あまり悪い影響はないようだけど。