いわゆる text to speech をやりたくなったので、Galatea の音声部分である GalateaTalk を試してみた。

Debian GNU/Linux etch on VMare Player の場合

必要そうなパッケージをインストール。


# apt-get install libtool
# apt-get install chasen
# apt-get install libxslt1.1 libxslt1-dev
# apt-get install libxml2 libxml2-dev
# apt-get install sox

GalateaTalk形態素解析辞書 UniDic から必要なファイルをダウンロード。


$ ls
chaone-1.3.0b2.1.zip  speakers-060820.tar.gz
gtalk-070712.tar.gz   unidic-1.3.0_eucj.tar.gz

形態素解析辞書と音声辞書を解凍。


$ tar zxvf ./unidic-1.3.0_eucj.tar.gz
$ tar zxvf ./speakers-060820.tar.gz
$ ln -s ./speakers-060820 ./speakers

ソースコードがEUC-JPなので、
ロケール変更してから configure -> make
設定ファイルやデータフィイル類もEUC-JPで用意しておく。


$ env | grep LANG
LANG=ja_JP.UTF-8
$ export LANG=ja_JP.eucJP
$ env | grep LANG
LANG=ja_JP.eucJP

ChaOne in C をビルドする。


$ cd ..
$ unzip ./chaone-1.3.0b2.1.zip
$ cd chaone-1.3.0b2
$ ./configure
$ make

GalateaTalk 本体をビルドする。


$ tar zxvf ./gtalk-070712.tar.gz
$ cd gtalk-070712
$ ./configure
(中略)
main.c: In function 'read_command':
main.c:355: error: incompatible implicit declaration of function 'setRun'
main.c:257: error: previous implicit declaration of 'setRun' was here
make: *** [main.o] Error 1

なぜか、コンパイルが通らない。
main.c にて、setRun の s が大文字になっているのが原因?
227行目の SetRun の宣言を setRun へ書き換えたら、コンパイルが通った。


void setRun( char *rel, char *val ); /* void SetRun( char *rel, char *val); */

GalateaTalk の設定ファイル ssm.conf を準備。


$ cat ./ssm.conf
# configuratiuon file for gtalk (GalateaTalk)
 
# path name of 'chasen'
CHASEN: /usr/bin/chasen
 
# configuration file for 'chasen'
CHASEN-RC: ./chasenrc
 
# command of running 'chaone'
#CHAONE: ../morph/chaone-1.3.0/chaone -s gtalk
#CHAONE: ../chaone-1.3.0b2/chaone -s gtalk
CHAONE: ../chaone-1.3.0b2/chaone
 
# path name of 'chaone.xsl' (only for library-based version)
#CHAONE-XSL-FILE: ../chaone-1.2.0/chaone_t_EUC-JP.xsl
#CHAONE-XSL-FILE: ../chaone-1.3.0b2/chaone_t_EUC-JP.xsl
 
# default for numbers and alphabets
NUMBER: DECIMAL
ALPHABET: WORD
DATE: YMD
TIME: hms
 
# dictionary
DICTIONARY: ./gtalk-eucjp.dic
 
# automatic play of synthesized speech
AUTO-PLAY: NO
 
# time delay [msec] for autuomatic play
AUTO-PLAY-DELAY: 250
 
# file of phoneme list
PHONEME-LIST: mono.lst
 
# parameter files for each speaker
SPEAKER-ID: male01
GENDER: male
DUR-TREE-FILE:   ../speakers/male01/tree-dur.inf
PIT-TREE-FILE:   ../speakers/male01/tree-lf0.inf
MCEP-TREE-FILE:  ../speakers/male01/tree-mcep.inf
DUR-MODEL-FILE:  ../speakers/male01/duration.pdf
PIT-MODEL-FILE:  ../speakers/male01/lf0.pdf
MCEP-MODEL-FILE: ../speakers/male01/mcep.pdf
 
# parameter files for each speaker
#SPEAKER-ID: female01
#GENDER: female
#DUR-TREE-FILE:   ../speakers/female01/tree-dur.inf
#PIT-TREE-FILE:   ../speakers/female01/tree-lf0.inf
#MCEP-TREE-FILE:  ../speakers/female01/tree-mcep.inf
#DUR-MODEL-FILE:  ../speakers/female01/duration.pdf
#PIT-MODEL-FILE:  ../speakers/female01/lf0.pdf
#MCEP-MODEL-FILE: ../speakers/female01/mcep.pdf

ChaSen の設定ファイル chasenrc を準備。


$ cat ./chasenrc
;;
;;  chasenrc for unidic-1.3.0
;;  chaOne用
;;
(GRAMMAR ../unidic)
(DADIC chadic)
 
(UNKNOWN_POS (名詞 普通名詞 一般))
 
(OUTPUT_FORMAT "<W1 orth=\"%m\" kana=\"%?U/%m/%y0/\" pron=\"%?U/%m/%a0/\" pos=\"%U(%P-)\"%?T/ cType=\"%T \"//%?F/ cForm=\"%F \"//%?I/ %i0//>%m</W1>\n")
 
(OUTPUT_COMPOUND "SEG")
 
(BOS_STRING "<S>\n")      
(EOS_STRING "</S>\n")
 
(DEF_CONN_COST 10000)
(POS_COST
	((*)       1)
	((UNKNOWN) 30000)
)
 
(CONN_WEIGHT 1)
(MORPH_WEIGHT 1)
(COST_WIDTH	  0)
 
(ANNOTATION
	(("<" ">") "%m\n")
	(("\"") "<cha:W1 orth=\"&#x22;\" kana=\"&#x22;\" pron=\"&#x22;\" pos=\"%U(%P-)\"%?T/ cType=\"%T \"//%?F/ cForm=\"%F \"//%?I/ %i//>%m</cha:W1>\n")
)

音声に変換する入力テキストデータファイル hoge.txt を準備。


$ cat ../hoge.txt
prop Text.text = NoAutoOutput
prop Text.pho = NoAutoOutput
prop Text.dur = NoAutoOutput
set Log = CONSOLE
set Log.conf = YES
set Log.text = YES
set Log.arrangedText = YES
set Log.chasen = YES
set Log.tag = YES
set Log.phoneme = YES
set Log.mora = YES
set Log.morph = YES
set Log.aphrase = YES
set Log.breath = YES
set Log.sentence = YES
set Text = この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
set Save  = ../hoge.raw
set Run = EXIT

GalateaTalk のコマンド gtalk を実行する。


$ ./gtalk -C ./ssm.conf < ../hoge.txt
rep Run = LIVE
rep Speak.stat = PROCESSING
* text
この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
* arranged_text
この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
* chasen result
Entity: line 2: parser error : attributes construct error
"コノ" pronBase="コノ" lForm="コノ" lemma="此の" form="コノ" aType="0"
                                                                               ^
Entity: line 2: parser error : Couldn't find end of Start Tag W1 line 2
"コノ" pronBase="コノ" lForm="コノ" lemma="此の" form="コノ" aType="0"
                                                                               ^
Entity: line 2: parser error : Opening and ending tag mismatch: S line 1 and W1
nBase="コノ" lForm="コノ" lemma="此の" form="コノ" aType="0"0>この</W1
                                                                               ^
Entity: line 3: parser error : Extra content at the end of the document
<W1 orth="音声" kana="{オンセイ/オンジョウ}" pron="{オンセ/オン

失敗。

なんとなく文字コードの混在が問題のような気がしないでもない。
chasen result の部分はなぜかUTF-8で出力されていた。
が、いいかげん疲れたのでここらで挫折。

Debian GNU/Linux etch on AMD Athlon64 X2 の場合

x86_64-unknown-linux-gnu が原因で configure できない。


$ cd ./gtalk-070712
$ ./configure
(中略)
checking build system type... Invalid configuration `x86_64-unknown-linux-gnu': machine `x86_64-unknown' not recognized
configure: error: /bin/sh config/config.sub x86_64-unknown-linux-gnu failed
の要領で、システムの「libtool」パッケージに含まれるconfig.guessとconfig.subで置き換えることで回避できた。更に、手動で/usr/share/libtool/以下から該当ファイルをコピーするのではなく、libtoolizeというコマンドで、これらのファイルを置き換えることができることも分かった。

the Minnu's filer2(mfiler2)のビルドメモ - 試験運用中なLinux備忘録

というわけで、ファイルをコピー。


$ cp /usr/share/libtool/config.guess ./config
$ cp /usr/share/libtool/config.sub ./config
$ ./configure

これで、AMD Athlon64 X2 のほうでは、raw audio ファイルを作成して、wave ファイルへ変換するところまではできた。


$ ./gtalk -C ./ssm.conf < ../hoge.txt
$ sox -r 16000 -w -s ../hoge.raw  ../hoge.wav

しかし……
できあがったファイルは、なんだかザーザーした音になっていた。
音声: 20071102_hoge.wav

(「追記: 2007-11-15」でザーザー音を解決)

ということで、GalateaTalk による音声合成を挫折。

せっかくなので変換の様子ログ。長い。


$ ./gtalk -C ./ssm.conf < ../hoge.txt
rep Run = LIVE
rep Speak.stat = PROCESSING
* text
南草津。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
* arranged_text
<PRON SYM="ミナミク’サツ">南草津</PRON>。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
* chasen result
<S>
  <AP orth="南草津。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。" pron="ミナミクサツ。このオンセーゴーセーキは、タグをシテーすることにより、ワすスピードをヘンえたり、セーのコーさをヘンえたり、セーのダイきさをヘンえたりすることができます。" aType="40" silence="NON">
    <PRON SYM="ミナミク’サツ" orth="南草津" pron="ミナミクサツ" pos="unk" aType="4">
Unknown hinshi ... unk
      <W2 orth="南" pos="unk" aType="0" pron="ナン">
        <W1 orth="南" kana="南" pron="南" pos="unk"/>
      </W2>
      <W2 orth="草" pos="unk" aType="0" pron="ソー">
        <W1 orth="草" kana="草" pron="草" pos="unk"/>
      </W2>
      <W2 orth="津" pos="unk" aType="0" pron="ツ">
        <W1 orth="津" kana="津" pron="津" pos="unk"/>
      </W2>
    </PRON>
    <W2 orth="。" pos="unk" aType="0" pron="。">
Unknown hinshi ... unk
      <W1 orth="。" kana="。" pron="。" pos="unk"/>
    </W2>
    <W2 orth="こ" pos="unk" aType="0" pron="こ">
Unknown hinshi ... unk
      <W1 orth="こ" kana="こ" pron="こ" pos="unk"/>
    </W2>
    <W2 orth="の" pos="unk" aType="0" pron="の">
Unknown hinshi ... unk
      <W1 orth="の" kana="の" pron="の" pos="unk"/>
    </W2>
    <W2 orth="音" pos="unk" aType="0" pron="オン">
Unknown hinshi ... unk
      <W1 orth="音" kana="音" pron="音" pos="unk"/>
    </W2>
    <W2 orth="声" pos="unk" aType="0" pron="セー">
Unknown hinshi ... unk
      <W1 orth="声" kana="声" pron="声" pos="unk"/>
    </W2>
    <W2 orth="合" pos="unk" aType="0" pron="ゴー">
Unknown hinshi ... unk
      <W1 orth="合" kana="合" pron="合" pos="unk"/>
    </W2>
    <W2 orth="成" pos="unk" aType="0" pron="セー">
Unknown hinshi ... unk
      <W1 orth="成" kana="成" pron="成" pos="unk"/>
    </W2>
    <W2 orth="器" pos="unk" aType="0" pron="キ">
Unknown hinshi ... unk
      <W1 orth="器" kana="器" pron="器" pos="unk"/>
    </W2>
    <W2 orth="は" pos="unk" aType="0" pron="は">
Unknown hinshi ... unk
      <W1 orth="は" kana="は" pron="は" pos="unk"/>
    </W2>
    <W2 orth="、" pos="unk" aType="0" pron="、">
Unknown hinshi ... unk
      <W1 orth="、" kana="、" pron="、" pos="unk"/>
    </W2>
    <W2 orth="タグ" pos="unk" aType="0" pron="タグ">
Unknown hinshi ... unk
      <W1 orth="タグ" kana="タグ" pron="タグ" pos="unk"/>
    </W2>
    <W2 orth="を" pos="unk" aType="0" pron="を">
Unknown hinshi ... unk
      <W1 orth="を" kana="を" pron="を" pos="unk"/>
    </W2>
    <W2 orth="指" pos="unk" aType="0" pron="シ">
Unknown hinshi ... unk
      <W1 orth="指" kana="指" pron="指" pos="unk"/>
    </W2>
    <W2 orth="定" pos="unk" aType="0" pron="テー">
Unknown hinshi ... unk
      <W1 orth="定" kana="定" pron="定" pos="unk"/>
    </W2>
    <W2 orth="す" pos="unk" aType="0" pron="す">
Unknown hinshi ... unk
      <W1 orth="す" kana="す" pron="す" pos="unk"/>
    </W2>
    <W2 orth="る" pos="unk" aType="0" pron="る">
Unknown hinshi ... unk
      <W1 orth="る" kana="る" pron="る" pos="unk"/>
    </W2>
    <W2 orth="こ" pos="unk" aType="0" pron="こ">
Unknown hinshi ... unk
      <W1 orth="こ" kana="こ" pron="こ" pos="unk"/>
    </W2>
    <W2 orth="と" pos="unk" aType="0" pron="と">
Unknown hinshi ... unk
      <W1 orth="と" kana="と" pron="と" pos="unk"/>
    </W2>
    <W2 orth="に" pos="unk" aType="0" pron="に">
Unknown hinshi ... unk
      <W1 orth="に" kana="に" pron="に" pos="unk"/>
    </W2>
    <W2 orth="よ" pos="unk" aType="0" pron="よ">
Unknown hinshi ... unk
      <W1 orth="よ" kana="よ" pron="よ" pos="unk"/>
    </W2>
    <W2 orth="り" pos="unk" aType="0" pron="り">
Unknown hinshi ... unk
      <W1 orth="り" kana="り" pron="り" pos="unk"/>
    </W2>
    <W2 orth="、" pos="unk" aType="0" pron="、">
Unknown hinshi ... unk
      <W1 orth="、" kana="、" pron="、" pos="unk"/>
    </W2>
    <W2 orth="話" pos="unk" aType="0" pron="ワ">
Unknown hinshi ... unk
      <W1 orth="話" kana="話" pron="話" pos="unk"/>
    </W2>
    <W2 orth="す" pos="unk" aType="0" pron="す">
Unknown hinshi ... unk
      <W1 orth="す" kana="す" pron="す" pos="unk"/>
    </W2>
    <W2 orth="スピード" pos="unk" aType="0" pron="スピード">
Unknown hinshi ... unk
      <W1 orth="スピード" kana="スピード" pron="スピード" pos="unk"/>
    </W2>
    <W2 orth="を" pos="unk" aType="0" pron="を">
Unknown hinshi ... unk
      <W1 orth="を" kana="を" pron="を" pos="unk"/>
    </W2>
    <W2 orth="変" pos="unk" aType="0" pron="ヘン">
Unknown hinshi ... unk
      <W1 orth="変" kana="変" pron="変" pos="unk"/>
    </W2>
    <W2 orth="え" pos="unk" aType="0" pron="え">
Unknown hinshi ... unk
      <W1 orth="え" kana="え" pron="え" pos="unk"/>
    </W2>
    <W2 orth="た" pos="unk" aType="0" pron="た">
Unknown hinshi ... unk
      <W1 orth="た" kana="た" pron="た" pos="unk"/>
    </W2>
    <W2 orth="り" pos="unk" aType="0" pron="り">
Unknown hinshi ... unk
      <W1 orth="り" kana="り" pron="り" pos="unk"/>
    </W2>
    <W2 orth="、" pos="unk" aType="0" pron="、">
Unknown hinshi ... unk
      <W1 orth="、" kana="、" pron="、" pos="unk"/>
    </W2>
    <W2 orth="声" pos="unk" aType="0" pron="セー">
Unknown hinshi ... unk
      <W1 orth="声" kana="声" pron="声" pos="unk"/>
    </W2>
    <W2 orth="の" pos="unk" aType="0" pron="の">
Unknown hinshi ... unk
      <W1 orth="の" kana="の" pron="の" pos="unk"/>
    </W2>
    <W2 orth="高" pos="unk" aType="0" pron="コー">
Unknown hinshi ... unk
      <W1 orth="高" kana="高" pron="高" pos="unk"/>
    </W2>
    <W2 orth="さ" pos="unk" aType="0" pron="さ">
Unknown hinshi ... unk
      <W1 orth="さ" kana="さ" pron="さ" pos="unk"/>
    </W2>
    <W2 orth="を" pos="unk" aType="0" pron="を">
Unknown hinshi ... unk
      <W1 orth="を" kana="を" pron="を" pos="unk"/>
    </W2>
    <W2 orth="変" pos="unk" aType="0" pron="ヘン">
Unknown hinshi ... unk
      <W1 orth="変" kana="変" pron="変" pos="unk"/>
    </W2>
    <W2 orth="え" pos="unk" aType="0" pron="え">
Unknown hinshi ... unk
      <W1 orth="え" kana="え" pron="え" pos="unk"/>
    </W2>
    <W2 orth="た" pos="unk" aType="0" pron="た">
Unknown hinshi ... unk
      <W1 orth="た" kana="た" pron="た" pos="unk"/>
    </W2>
    <W2 orth="り" pos="unk" aType="0" pron="り">
Unknown hinshi ... unk
      <W1 orth="り" kana="り" pron="り" pos="unk"/>
    </W2>
    <W2 orth="、" pos="unk" aType="0" pron="、">
Unknown hinshi ... unk
      <W1 orth="、" kana="、" pron="、" pos="unk"/>
    </W2>
    <W2 orth="声" pos="unk" aType="0" pron="セー">
Unknown hinshi ... unk
      <W1 orth="声" kana="声" pron="声" pos="unk"/>
    </W2>
    <W2 orth="の" pos="unk" aType="0" pron="の">
Unknown hinshi ... unk
      <W1 orth="の" kana="の" pron="の" pos="unk"/>
    </W2>
    <W2 orth="大" pos="unk" aType="0" pron="ダイ">
Unknown hinshi ... unk
      <W1 orth="大" kana="大" pron="大" pos="unk"/>
    </W2>
    <W2 orth="き" pos="unk" aType="0" pron="き">
Unknown hinshi ... unk
      <W1 orth="き" kana="き" pron="き" pos="unk"/>
    </W2>
    <W2 orth="さ" pos="unk" aType="0" pron="さ">
Unknown hinshi ... unk
      <W1 orth="さ" kana="さ" pron="さ" pos="unk"/>
    </W2>
    <W2 orth="を" pos="unk" aType="0" pron="を">
Unknown hinshi ... unk
      <W1 orth="を" kana="を" pron="を" pos="unk"/>
    </W2>
    <W2 orth="変" pos="unk" aType="0" pron="ヘン">
Unknown hinshi ... unk
      <W1 orth="変" kana="変" pron="変" pos="unk"/>
    </W2>
    <W2 orth="え" pos="unk" aType="0" pron="え">
Unknown hinshi ... unk
      <W1 orth="え" kana="え" pron="え" pos="unk"/>
    </W2>
    <W2 orth="た" pos="unk" aType="0" pron="た">
Unknown hinshi ... unk
      <W1 orth="た" kana="た" pron="た" pos="unk"/>
    </W2>
    <W2 orth="り" pos="unk" aType="0" pron="り">
Unknown hinshi ... unk
      <W1 orth="り" kana="り" pron="り" pos="unk"/>
    </W2>
    <W2 orth="す" pos="unk" aType="0" pron="す">
Unknown hinshi ... unk
      <W1 orth="す" kana="す" pron="す" pos="unk"/>
    </W2>
    <W2 orth="る" pos="unk" aType="0" pron="る">
Unknown hinshi ... unk
      <W1 orth="る" kana="る" pron="る" pos="unk"/>
    </W2>
    <W2 orth="こ" pos="unk" aType="0" pron="こ">
Unknown hinshi ... unk
      <W1 orth="こ" kana="こ" pron="こ" pos="unk"/>
    </W2>
    <W2 orth="と" pos="unk" aType="0" pron="と">
Unknown hinshi ... unk
      <W1 orth="と" kana="と" pron="と" pos="unk"/>
    </W2>
    <W2 orth="が" pos="unk" aType="0" pron="が">
Unknown hinshi ... unk
      <W1 orth="が" kana="が" pron="が" pos="unk"/>
    </W2>
    <W2 orth="で" pos="unk" aType="0" pron="で">
Unknown hinshi ... unk
      <W1 orth="で" kana="で" pron="で" pos="unk"/>
    </W2>
    <W2 orth="き" pos="unk" aType="0" pron="き">
Unknown hinshi ... unk
      <W1 orth="き" kana="き" pron="き" pos="unk"/>
    </W2>
    <W2 orth="ま" pos="unk" aType="0" pron="ま">
Unknown hinshi ... unk
      <W1 orth="ま" kana="ま" pron="ま" pos="unk"/>
    </W2>
    <W2 orth="す" pos="unk" aType="0" pron="す">
Unknown hinshi ... unk
      <W1 orth="す" kana="す" pron="す" pos="unk"/>
    </W2>
    <W2 orth="。" pos="unk" aType="0" pron="。">
Unknown hinshi ... unk
      <W1 orth="。" kana="。" pron="。" pos="unk"/>
    </W2>
  </AP>
</S>
* tag data
- n_tag: 0
* yomi is NOT katakana ... こ (a4,b3)
* yomi is NOT katakana ... の (a4,ce)
* yomi is NOT katakana ... は (a4,cf)
* yomi is NOT katakana ... を (a4,f2)
* yomi is NOT katakana ... す (a4,b9)
* yomi is NOT katakana ... る (a4,eb)
* yomi is NOT katakana ... こ (a4,b3)
* yomi is NOT katakana ... と (a4,c8)
* yomi is NOT katakana ... に (a4,cb)
* yomi is NOT katakana ... よ (a4,e8)
* yomi is NOT katakana ... り (a4,ea)
* yomi is NOT katakana ... す (a4,b9)
* yomi is NOT katakana ... を (a4,f2)
* yomi is NOT katakana ... え (a4,a8)
* yomi is NOT katakana ... た (a4,bf)
* yomi is NOT katakana ... り (a4,ea)
* yomi is NOT katakana ... の (a4,ce)
* yomi is NOT katakana ... さ (a4,b5)
* yomi is NOT katakana ... を (a4,f2)
* yomi is NOT katakana ... え (a4,a8)
* yomi is NOT katakana ... た (a4,bf)
* yomi is NOT katakana ... り (a4,ea)
* yomi is NOT katakana ... の (a4,ce)
* yomi is NOT katakana ... き (a4,ad)
* yomi is NOT katakana ... さ (a4,b5)
* yomi is NOT katakana ... を (a4,f2)
* yomi is NOT katakana ... え (a4,a8)
* yomi is NOT katakana ... た (a4,bf)
* yomi is NOT katakana ... り (a4,ea)
* yomi is NOT katakana ... す (a4,b9)
* yomi is NOT katakana ... る (a4,eb)
* yomi is NOT katakana ... こ (a4,b3)
* yomi is NOT katakana ... と (a4,c8)
* yomi is NOT katakana ... が (a4,ac)
* yomi is NOT katakana ... で (a4,c7)
* yomi is NOT katakana ... き (a4,ad)
* yomi is NOT katakana ... ま (a4,de)
* yomi is NOT katakana ... す (a4,b9)
* morph data
(orth	pron	POS	[accent]	aConType	mora)
silB	silB	:-1/-1/-1	[-1]	-	0
南草津	ミナミクサツ	名詞-助動詞語幹:1000/-1/-1	[4]	-	6
。	。	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
こ	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
の	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
音	オン	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
声	セー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
合	ゴー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
成	セー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
器	キ	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
は	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
、	、	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
タグ	タグ	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
を	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
指	シ	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
定	テー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
す	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
る	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
こ	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
と	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
に	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
よ	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
り	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
、	、	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
話	ワ	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
す	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
スピード	スピード	名詞-助動詞語幹:1000/-1/-1	[0]	-	4
を	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
変	ヘン	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
え	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
た	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
り	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
、	、	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
声	セー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
の	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
高	コー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
さ	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
を	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
変	ヘン	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
え	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
た	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
り	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
、	、	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
声	セー	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
の	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
大	ダイ	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
き	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
さ	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
を	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
変	ヘン	名詞-助動詞語幹:1000/-1/-1	[0]	-	2
え	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
た	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
り	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
す	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
る	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
こ	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
と	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
が	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
で	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
き	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
ま	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
す	pau	名詞-助動詞語幹:1000/-1/-1	[0]	-	0
。	。	名詞-助動詞語幹:1000/-1/-1	[0]	-	1
silE	silE	:-1/-1/-1	[-1]	-	0
- n_morph: 64
* mora data
silB ミ ナ ミ ク サ ツ 。 pau pau オ ン セ ー ゴ ー セ ー キ pau 、 タ グ pau シ テ ー pau pau pau pau pau pau pau 、 ワ pau ス ピ ー ド pau ヘ ン pau pau pau 、 セ ー pau コ ー pau pau ヘ ン pau pau pau 、 セ ー pau ダ イ pau pau pau ヘ ン pau pau pau pau pau pau pau pau pau pau pau pau 。 silE 
* aphrase data
(orth	pron	[accent]	mora	position	DEC/INT)
silB	silB	[0]	0	-1	DEC
南草津。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。	ミナミクサツ。paupauオンセーゴーセーキpau
、タグpauシテーpaupaupaupaupaupaupau、ワpauスピードpauヘンpaupaupau、セーpauコーpaupauヘンpaupaupau、セーpauダイpaupaupauヘンpaupaupaupaupaupaupaupaupaupaupaupau。	[40]	45	1	DEC
		[0]	0	-1	DEC
- n_aphrase: 3
* phoneme data
sil m i n a m i k U s a ts u pau pau pau o N s e e g o o s e e k i pau pau t a g u pau sh I t e e pau pau pau pau pau pau pau pau w a pau s U p i i d o pau h e N pau pau pau pau s e e pau k o o pau pau h e N pau pau pau pau s e e pau d a i pau pau pau h e N pau pau pau pau pau pau pau pau pau pau pau pau pau sil 
* breath data
(orth	pron	mora	position)
silB	silB	0	-1
南草津。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。	ミナミクサツ。paupauオンセーゴーセーキpau
、タグpauシテーpaupaupaupaupaupaupau、ワpauスピードpauヘンpaupaupau、セーpauコーpaupauヘンpaupaupau、セーpauダイpaupaupauヘンpaupaupaupaupaupaupaupaupaupaupaupau。	45	1
		0	-1
- n_breath: 3
* sentence data
(1) silB南草津。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
- n_sentence: 1
rep Text.text = <PRON SYM="ミナミク’サツ">南草津</PRON>。この音声合成器は、タグを指定することにより、話すスピードを変えたり、声の高さを変えたり、声の大きさを変えたりすることができます。
rep Speak.text = 南草津。音声合成器、タグ指定、話スピード変、声高変、声大変。
rep Text.pho = sil[10] m[40] i[60] n[50] a[80] m[60] i[65] k[75] U[40] s[95] a[60] ts[120] u[65] pau[75] pau[45] pau[40] o[95] N[45] s[95] e[65] e[60] g[60] o[90] o[70] s[105] e[65] e[65] k[105] i[65] pau[75] pau[40] t[175] a[65] g[60] u[60] pau[35] sh[60] I[35] t[75] e[65] e[65] pau[75] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[40] w[40] a[80] pau[30] s[95] U[40] p[75] i[65] i[60] d[50] o[80] pau[35] h[75] e[95] N[60] pau[120] pau[45] pau[45] pau[40] s[95] e[65] e[65] pau[75] k[175] o[60] o[65] pau[75] pau[40] h[75] e[95] N[60] pau[120] pau[45] pau[45] pau[40] s[95] e[65] e[65] pau[85] d[50] a[95] i[75] pau[75] pau[45] pau[40] h[75] e[95] N[60] pau[120] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] sil[10]
rep Speak.pho = sil[10] m[40] i[60] n[50] a[80] m[60] i[65] k[75] U[40] s[95] a[60] ts[120] u[65] pau[75] pau[45] pau[40] o[95] N[45] s[95] e[65] e[60] g[60] o[90] o[70] s[105] e[65] e[65] k[105] i[65] pau[75] pau[40] t[175] a[65] g[60] u[60] pau[35] sh[60] I[35] t[75] e[65] e[65] pau[75] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[40] w[40] a[80] pau[30] s[95] U[40] p[75] i[65] i[60] d[50] o[80] pau[35] h[75] e[95] N[60] pau[120] pau[45] pau[45] pau[40] s[95] e[65] e[65] pau[75] k[175] o[60] o[65] pau[75] pau[40] h[75] e[95] N[60] pau[120] pau[45] pau[45] pau[40] s[95] e[65] e[65] pau[85] d[50] a[95] i[75] pau[75] pau[45] pau[40] h[75] e[95] N[60] pau[120] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] pau[45] sil[10]
rep Text.dur = 7075
rep Speak.dur = 7075
rep Speak.stat = READY
rep Run = EXIT
$ ./gtalk -C ./ssm.conf < ../hoge.txtenv
$ sox -r 16000 -w -s ../hoge.raw  ../hoge.wav

Ref. GalateaTalk 日本語テキスト音声合成ソフトウエア (NI-Lab.'s MemoWiki - GalateaTalk)


追記: 2007-11-15

親切な方のご意見で、目的を果たせた!
ありがとうございます m(_ _)m

No.4116   Name: jovanni   Thu Nov 15 18:14:40 2007
ざーざー音は、 sox のoptionに -x をつけたら治るかも。

あと、gtalk に < で入力すると、合成が完全に終了する前にプログラムが終了してしまうかも...

Ido-Batarian BBS

ふむふむφ(.. )


$ sox -r 16000 -w -s -x ../hoge.raw  ../hoge.wav

ってやったら、ザーザーしていない、
ちゃんとした音声の wave ファイルができた!

音声: 20071102_hoge2.wav

まぁ、ちょっとちがうところはあるけど(^_^;
この原因は、GalateaTalk での変換ログを見た感じでは、
「rep Speak.text = 南草津。音声合成器、タグ指定、話スピード変、声高変、声大変。」
の部分が音声になっているっぽい。

tags: zlashdot Text2Speech Text2Speech

Posted by NI-Lab. (@nilab)