GalateaTalkは日本語の音声合成エンジン。 Galatea Project の一環として開発された。 オープンソースで無償利用できるシステムとして期待されている。 構成要素およびバージョンによってライセンスが異なっている。 島根県CMSでは派生版が使用されている。
使ってみようGalateaTalkというWindows用のアプリケーションが公開されている。
「しゃべります。」開発プロジェクトにて「キーボードで打ち込んだ文字を、あたかもしゃべっているかのように読み上げてくれる」音声合成ソフト(Windows対応)が公開されている。
注意:この記事は西本の把握している情報で、Galatea Project および GalateaTalk プロジェクトの公式な見解ではありません。
GalateaTalk の Linux 版および Windows 版は、2003年8月に(財団法人京都高度技術研究所 (ASTEM) が、情報処理振興事業協会 (IPA) が実施した「重点領域情報技術開発事業」において開発した研究成果 Galatea Toolkit の一部として)下記のライセンスで公開された。
なお unidic については galatea4win\engine\SSM\unidic-sjis-1.1.0\COPYING に以下のように記載されている。
Copyright (c) 2002-2003 Chiba University and Information-technology Promotion Agency, Japan (IPA). All Rights Reserved. Use, reproduction, and distribution of this software is permitted. Any copy of this software, whether in its original form or modified, must include both the above copyright notice and the following paragraphs. CHIBA UNIVERSITY, INFORMATION-TECHNOLOGY PROMOTION AGENCY, JAPAN (IPA), AND THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL CHIBA UNIVERSITY, NOR THE CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2009年3月にISTCの活動が終了した。ISTCが活動していた間は最新の Galatea Toolkit は会員に配付された。
IPA2003年版を改良したバージョンが sourceforge.jp にて公開された。
この成果は「IPA 最終版の派生物」であるとされた。すなわち、全体としての使用許諾は IPA 最終版に基づくものである。
ただし2003年から2009年にかけて、 GalateaTalk を構成する主な要素である gtalk (コア部分), unidic, chaone, chasen は、以下のように独自のライセンスで別途公開された。
2009年4月以降の GalateaTalk のライセンスについて:
galateatalk プロジェクトのサイトにはライセンスは独自としか記載されておらず、 明記されていない。
コア部分(gtalk)は下記のとおりである。
GalateaTalk は chasen (chasen-legacy) を使用している。Ubuntu や Vine 5 で配付されている(ipadic対応の)chasen-2.4.x はそのまま利用できる。
GalateaTalk が使用している日本語辞書 unidic は独自ライセンスである。 ユーザ登録すればダウンロードできる。
UniDic ver.1.3.12 利用条件 1. UniDic ver.1.3.12 の著作権は,伝康晴・山田篤・小椋秀樹・小磯花絵・小 木曽智信が保持する。 2. UniDic ver.1.3.12 を複製又は改変することは,個人的な利用に限り認める。 3. UniDic ver.1.3.12 及びこれを改変したものを再配布してはならない。 4. UniDic ver.1.3.12 を利用して行った研究等の成果を公表する場合は, UniDic ver.1.3.12 を利用したことを明記すること。 5. 営利を目的として,UniDic ver.1.3.12 を利用する場合は,事前に著作権者 と協議すること。 6. UniDic ver.1.3.12 を利用することによって,直接的・間接的に生じたいか なる損害についても,著作権者は賠償する責任を負わない。 7. 本文書に定めのない事項については,著作権者と協議すること。
GalateaTalk が使用している形態素解析後処理ツール ChaOne のライセンスは下記のとおりである。
ChaOne version 1.3.3 Copyright (c) 2004-2009 Atsushi YAMADA (Studio ARC) All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ``Software''), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ATSUSHI YAMADA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
64bit 環境での動作は未確認。
unidic については、公開中のChaSen版バイナリ辞書は32ビット専用。
Mac 対応は作業中。 http://en.nishimotz.com/galateatalk を参考にされたい。
RUN スクリプトを実行し, 合成音声が出力されることを確認する.
$ cd linux/bin/SSM $ perl RUN
本項は ISTC 配付バージョンに関するメモ。
GalateaTalk を更新する場合などには以下を確認する.
[SSM/gtalk/ssm.conf]
# path name of 'chasen' CHASEN: /usr/local/istc/chasen-2.4.1-istc/bin/chasen # configuration file for 'chasen' CHASEN-RC: /usr/local/istc/chasen-2.4.1-istc/etc/chasenrc # command of running 'chaone' CHAONE: /usr/local/istc/chaone-1.3.0-istc/chaone
[/usr/local/istc/chasen-2.4.1-istc/etc/chasenrc]
(GRAMMAR /usr/local/istc/chasen-2.4.1-istc/lib/chasen/dic) (DADIC chadic)
作成:2007-07-12
作業環境 Vine Linux 3.2
過去のISTC版に関するメモ。
概要: 過去のバージョンを上書きしないように morph の実行イメージを /usr/local/istc/ に作る。 /usr/local/istc/chasen-2.4.1-istc ... chasen /usr/local/istc/unidic-1.3.0-pkg ... unidic (eucj) /usr/local/istc/chaone-1.3.0-istc ... chaone * chasen-2.4.1 用意するファイル chasen-2.4.1.tar.gz $ tar xvfz chasen-2.4.1.tar.gz $ cd chasen-2.4.1 $ ./configure --prefix=/usr/local/istc/chasen-2.4.1-istc $ make $ make install * unidic-1.3.0-pkg 用意するファイル unidic-1.3.0-pkg.tar.gz $ tar xvfz unidic-1.3.0-pkg.tar.gz $ cd unidic-1.3.0-pkg $ export PATH=/usr/local/istc/chasen-2.4.1-istc/bin:$PATH $ sh configure --with-packagedir=/usr/local/istc/unidic-1.3.0-pkg $ make $ make install * unidic-1.3.0_eucj への差し替え 用意するファイル unidic-1.3.0_eucj.tar.gz $ tar xvfz unidic-1.3.0_eucj.tar.gz $ cp unidic/* /usr/local/istc/unidic-1.3.0-pkg/dic/ * chasen の辞書設定 chasen の dicdir を確認してリンクをはる $ /usr/local/istc/chasen-2.4.1-istc/bin/chasen-config --dicdir /usr/local/istc/chasen-2.4.1-istc/lib/chasen/dic $ cd /usr/local/istc/chasen-2.4.1-istc/lib $ mkdir chasen $ cd chasen/ $ ln -s /usr/local/istc/unidic-1.3.0-pkg/dic dic デフォルトの chasenrc を作る $ cd /usr/local/istc/chasen-2.4.1-istc/ $ mkdir etc $ cd etc/ $ cp /usr/local/istc/unidic-1.3.0-pkg/dic/chasenrc . [chasenrc] の追加および修正 ;; 変更箇所 (GRAMMAR /usr/local/istc/chasen-2.4.1-istc/lib/chasen/dic) ;; ;; 変更箇所 (改行を挿入) (OUTPUT_FORMAT "<W1 orth=\"%m\" kana=\"%?U/%m/%y/\" pron=\"%?U/%m/%a/\" pos=\"%U(%P-)\"%?T/ cType=\"%T \"//%?F/ cForm=\"%F \"//%?I/ %i//>%m</W1>\n") ;; ;; 変更箇所 (改行を挿入) (ANNOTATION (("<" ">") "%m\n") (("\"") "<W1 orth=\""\" kana=\""\" pron=\""\" pos=\"%U(%P-)\"%?T/ cType=\"%T \"//%?F/ cForm=\"%F \"//%?I/ %i//>%m</W1>\n") ) ;; ;; 追加 (BOS_STRING "<S>\n") (EOS_STRING "</S>\n") * chasen + unidic の動作確認 (出力に改行を挿入) $ echo "今日はいい天気です。" | /usr/local/istc/chasen-2.4.1-istc/bin/chasen <S> <W1 orth="今日" kana="キョウ" pron="キョー" pos="名詞-普通名詞-副詞可能" orthBase="今日" kanaBase="キョウ" pronBase="キョー" lForm="キョウ" lemma="今日" form="キョウ" aType="1" aConType="C3">今日</W1> <W1 orth="は" kana="ハ" pron="ワ" pos="助詞-係助詞" orthBase="は" kanaBase="ハ" pronBase="ワ" lF orm="ハ" lemma="は" form="ハ" aConType="動詞%F5,名詞%F1,形容詞%F2@-1">は</W1> (以下略) * chaone-1.3.0 /usr/local/istc/chaone-1.3.0-istc にインストールする 用意するファイル chaone-1.3.0.tar.gz その前に Vine Linxu 3.1 のバグ回避(?) # su # cd /usr/include # ln -s libxml2/libxml . $ tar xvfz chaone-1.3.0.tar.gz $ cd chaone-1.3.0 $ sh configure --with-chaonedir=/usr/local/istc/chaone-1.3.0-istc $ make $ make install * chasen + unidic + chaone の動作確認 (出力に改行を挿入) $ echo "今日はいい天気です。" | /usr/local/istc/chasen-2.4.1-istc/bin/chasen | /usr/local/istc/chaone-1.3.0-istc/chaone <S> <cha:W2 xmlns:cha="http://www.unidic.org/chasen/ns/structure/1.0" orth="今日" pos="名詞-普通名詞-副詞可能" pron="キョー"> <cha:W1 orth="今日" kana="キョウ" pron="キョー" pos="名詞-普通名詞-副詞可能" orthBase="今日" kanaBase="キョウ" pronBase="キョー" lForm="キョウ" lemma="今日" form="キョウ" aType="1" aConType="C3">今日</cha:W1> </cha:W2> <cha:W2 xmlns:cha="http://www.unidic.org/chasen/ns/structure/1.0" orth="は" pos="助詞-係助詞" pron="ワ"> <cha:W1 orth="は" kana="ハ" pron="ワ" pos="助詞-係助詞" orthBase="は" kanaBase="ハ" pronBase="ワ" lForm="ハ" lemma="は" form="ハ" aConType="動詞%F5,名詞%F1,形容詞%F2@-1">は</cha:W1> </cha:W2> (以下略)
README で説明されている。
Galatea Dialog Studio では実験的に Windows 対応を行い、AgentManager をとおさないで gtalk.exe のサブプロセスと通信を行う実装をした。
文字コードは Windows では Shift_JIS を、Linux では EUC-JP が使われる。
gtalk にはソケットサーバ機能がある。 galatea4win ではソケット通信を使っているが、Linux版にも実装されている。
ソケット接続の場合はコマンド行の末尾に "./" が必要である。
端末1での操作:
$ cd /usr/local/galatea-engine/SSM/gtalk $ ./gtalk -C ~/.galatea/ssm.conf -p 59999
端末2での操作:
$ telnet localhost 59999 set Text = 12345./ set Speak = NOW./
READMEに各ファイルの概要が書かれている。
音声を生成するコア部分を抜粋する。
main.c: setText()
refresh(); text_analysis( val ); /* テキスト解析 */ // ... parameter_generation(); /* パラメータ生成(F0,MLSAフィルタ係数,継続長) */ do_synthesis(); /* 合成波形の生成 */
void parameter_generation() は main.c にある。
void parameter_generation() { /* 音声合成の初期設定 */ init_parameter(); /* 音素継続長の決定 */ make_duration(); /* 音素継続長の変更 */ modify_duration(); make_cumul_time(); modify_voice(); // ... /* パラメータ生成 F0,MLSAフィルタ係数 */ make_parameter(); /* F0, ゲイン b(0) の変更 */ modify_f0(); modify_power(); }
make_parameter() は make_parameter.c にある。GenerateParam() を呼んでいる。
GenerateParam() は mlpg.c にある。
do_synthesis.c: do_synthesis()
for(nframe = shift_start; nframe < totalframe; nframe++) { /* for power modification */ coeff[nframe][0] = power.data[nframe]; /* MLSA filter */ vocoder(f0.data[nframe], coeff[nframe], mceppst.order, alpha.data[nframe], speaker[spid].postfilter_coef); // ... }
double **coeff および int totalframe は main.c のグローバル変数。
vocoder() は vocoder.c にある。
メルケプストラムの情報を見たいので、ちょっと追っかけた。 main.c にグローバル変数 double **mcep があります。 でも、 do_synthesis.c: do_synthesis() ではすでに mcep から計算された coeff の値が 使われているように見えます。 どこで mcep[][] を計算しているのか。。 ためしにグローバルな構造体 g_syn を作り、 mfcc 変数をその中に移してみました。 この状態でコンパイルできて動いているので、 make_parameter で alloc されたサイズであることは間違いないです。 でも参照されていないので、もしかすると本当に使われていないのかも。。 デバッガ (gdb) で軽く追ってみたのですが、 mceppst.order は 18 で、do_synthesis のループの後でも、 g_syn->mcep[xx][1..17] はいずれも 0 のままのように見えます。 mfcc は完全に削除しても gtalk が動きました。 mfcc は完全に未使用の配列だと思われます。 mlpg.c:119: mc2b( mceppst.par[mcepframe], coeff[mcepframe], mceppst.order, alpha.data[mcepframe] ); の mceppst.par にケプストラムが入っているのでは。。 mlpg.h: typedef struct _PStream { int vSize; int order; int mType; int T; int max_T; int width; DWin dw; double **par; /* output parameter vector */ SMatrices sm; } PStream; もう少し gdb と ddd (sudo aptitude ddd でインストールできる GUI デバッガ) で追ってみました。 setText するたびに、 main.c の PStream pitchpst; PStream mceppst; の両方について、 mlpg.c のvoid InitPStream(PStream *pst) が2回呼ばれる。 pst->par = ddcalloc(pst->T,pst->order+1); で二次元配列が確保される。 これらは coeff を計算するために使用され、 すぐにvoid FreePStream(PStream *pst)が呼ばれるので、 setText が終わったときには mceppst.par の中身は free されてしまっている。 FreePStream されるまえに mceppst.par を 別の配列にコピーしたり、ファイルにダンプしたりできればよい? PStream の T がフレーム数だと思っていいのか自信がないのだけど。