トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

HTSによるHMM音声合成 の変更点

Top / HTSによるHMM音声合成

#freeze
#access
#analog

*HMM音声合成ツールキット HTS [#p0da6774]

#contents

**HTSとは [#t671ede2]
-[[名古屋工業大学徳田・李研究室:http://www.sp.nitech.ac.jp/index.php?%A5%DB%A1%BC%A5%E0]] が提供する[[音声合成基盤ソフトウェア:http://www.sp.nitech.ac.jp/index.php?%A5%DB%A1%BC%A5%E0%2F%A5%BD%A5%D5%A5%C8%A5%A6%A5%A7%A5%A2]]
-HTS(修正HTK)+SPTK(('''[[NII講演 統計的手法に基づいた音声合成 ―原理と最近の進展―(名古屋工業大学 徳田恵一教授):http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?HMM%E9%9F%B3%E5%A3%B0%E5%90%88%E6%88%90#fde72156]]''' による))
--HTKからの修正点
---ストリーム依存のコンテキストクラスタリング
---状態継続長モデルとクラスタリング
---F0モデリングのための状態出力確率
--感情音声合成, 話者適応, モーフィング, 歌声合成 など.
--言語に依存したコードは無い(どんな言語でも・歌唱音も合成可能)
--LPC, LSP, COC, 単位選択音声合成(CHATR), HMM音声合成(HTS), STRAIGHT など日本製技術の集積
--さまざまな企業で使われている((ただし、多様な音声が合成可能な点に着目した例は少ない、とのこと))

**関連リンク [#eda08465]
-[[徳田先生のページ:http://www.sp.nitech.ac.jp/~tokuda/index-j.html]] - デモやプレゼンテーション
-[[HMM-based Speech Synthesis System (HTS) - Home:http://hts.sp.nitech.ac.jp/]]
-[[hts_engine API:http://hts-engine.sourceforge.net/]]
--ランタイムエンジン hts_engine だけはHTKと独立しているので商用利用可能
-[[HMM音声合成ツールキットの概要:http://www.sp.nitech.ac.jp/~zen/english/index.php?plugin=attach&refer=Publications/Domestic%20conferences&openfile=zen-asj0209-HTS.pdf]]
-[[HMM音声合成ツールキット ver. 2.0:http://www.sp.nitech.ac.jp/~zen/english/index.php?plugin=attach&refer=Publications/Domestic%20conferences&openfile=zen-asj0703-slide.pdf]]
-[[Open JTalk:http://open-jtalk.sourceforge.net/]]
--[[Open JTalk デモ:http://www.sp.nitech.ac.jp/demo/open_jtalk/]]
-'''[[NII講演 統計的手法に基づいた音声合成 ―原理と最近の進展―(名古屋工業大学 徳田恵一教授):http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?HMM%E9%9F%B3%E5%A3%B0%E5%90%88%E6%88%90#fde72156]]'''
-[[MMDAgent:http://www.itmedia.co.jp/news/articles/1009/22/news028.html]] 今冬公開予定(('''[[NII講演 統計的手法に基づいた音声合成 ―原理と最近の進展―(名古屋工業大学 徳田恵一教授):http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?HMM%E9%9F%B3%E5%A3%B0%E5%90%88%E6%88%90#fde72156]]''' による))

*Linux(Debian GNU/Linux 6.0((注:Debian GNU/Linux 4.0 では、hts_engine API(1.04) のコンパイルに失敗しました。))(([[WindowsにHTSをインストール:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?JUNK#vc33d8a7]]することも試しましたが、うまくいっていません。))((MacintoshにHTSをインストールする方法に関して、菊池研究室の宮島崇浩研究員が検討なさっています。)))にインストール [#na47b408]
-ここでは、64bit((32bitコンピュータの場合、ActiveTclのダウンロードファイルを変えて下さい。)) Linux コンピュータ(Debian GNU/Linux 6.0)にHTSをインストールする方法を説明します。
-なお、以下の説明ではホームディレクトリのパスを ''$HOME'' と記述します。

**Cコンパイラのインストール [#wd299b4b]
-[[C/C++開発環境/Linux(Debian GNU/Linux 6.0)にCコンパイラをインストール:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/15.html#nb834bbb]] に従って gccコンパイラをインストールしておきます。

**必要なファイルのダウンロードとインストール [#h155bc58]
-&color(red){[[サンプルの音響モデルや辞書を使って音声合成を試す:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#n2f88a25]]だけなら、hts_engine API と Open JTalk のみインストールすればOKです。};
-以下でダウンロードした各ファイルは解凍して((.tar.gz形式のファイルの解凍は、Windowsでは Lhaplus などで可能です。Linuxでは tar コマンドを使います。))、$HOME/HTS ディレクトリ直下に入れておきます。
--HTK-3.4.1.tar.gz と HDecode-3.4.1.tar.gz は解凍すると htk ディレクトリにまとまります。

***hts_engine_API [#jd6fa8d8]
-[[hts_engine API:http://hts-engine.sourceforge.net/]]
--Source Code より hts_engine_API-1.06.tar.gz をダウンロードしました。
--2012/4/4 時点のバージョン : version 1.06

-hts_engine APIをコンパイルします。((./configure --prefix の引数に「$HOME/HTS/hts_engine_API-1.06」を指定すると、「~は同じファイルです」エラーが出て make install に失敗します。インストールディレクトリはソースコードとは別のディレクトリを指定します([[参考:http://oshiete.goo.ne.jp/qa/2801007.html]])。))
#geshi(bash){{
mkdir $HOME/HTS/hts_engine_API
cd $HOME/HTS/hts_engine_API-1.06
chmod 777 $HOME/HTS/hts_engine_API-1.06/*
./configure --prefix=$HOME/HTS/hts_engine_API/
make
make install
}}

***Open JTalk [#we2af101]
-Open JTalk
--HTSを使ったHMMテキスト音声合成システム(HTSのデモアプリ)
--[[Open JTalk:http://open-jtalk.sourceforge.net/]] の Source Code より open_jtalk-1.05.tar.gz をダウンロードします。
--2012/4/4 時点のバージョン : 1.05

-Open JTalk サンプル音響モデル
--[[Open JTalk:http://open-jtalk.sourceforge.net/]] より > HTS voice version 1.04 > Binary Package をダウンロードします。
--2012/04/04 現在のファイル名は hts_voice_nitech_jp_atr503_m001-1.04.tar.gz

-Open JTalkをコンパイルします。
#geshi(bash){{
mkdir $HOME/HTS/open_jtalk/
cd $HOME/HTS/open_jtalk-1.05
chmod 777 $HOME/HTS/open_jtalk-1.05/*
./configure --with-hts-engine-header-path=$HOME/HTS/hts_engine_API/include --with-hts-engine-library-path=$HOME/HTS/hts_engine_API/lib --prefix=$HOME/HTS/open_jtalk/
make
make install
}}
--辞書ファイルはすでにこの中に入っているようです。((ただし EUC、Shift-JISの辞書が必要なら[[ここ:http://open-jtalk.sourceforge.net/]]から別途ダウンロード))

***HTKとHTS [#pae9f37a]
-HTK 基本セット
--[[ここ:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/92.html#qc0725d1]] を参考に HTK-3.4.1.tar.gz をダウンロードします。
--HTK-3.4.1 以降のバージョンでないとHTSのパッチが当たりません。

-HTK Speech Recognition Toolkit
--[[ここ:http://htk.eng.cam.ac.uk/prot-docs/hdecode.shtml]] から、Linux/Unix downloads > HDecode-3.4.1.tar.gz をダウンロードします。

-HTS(HTKのパッチとして配布)
--[[HMM-based Speech Synthesis System (HTS) - Home:http://hts.sp.nitech.ac.jp/]]
---Download にある README、Document、Source code をダウンロードしました。
---2012/4/4 時点のバージョン : HTS-2.2_for_HTK-3.4.1.tar.bz2

-はじめに、HTSのパッチを当てます。
--HTS-2.2_for_HTK-3.4.1 内の INSTALL (テキストファイル)の指示に従います。
++同じディレクトリ内にある HTS-2.2_for_HTK-3.4.1.patch を、htkディレクトリに入れる
#geshi(bash){{
cp $HOME/HTS/HTS-2.2_for_HTK-3.4.1/HTS-2.2_for_HTK-3.4.1.patch $HOME/HTS/htk/
}}
++htkディレクトリに移動して、以下を実行
#geshi(bash){{
cd $HOME/HTS/htk
patch -p1 -d . < HTS-2.2_for_HTK-3.4.1.patch
}}
---&ref(patch_log.txt); のように出たら、成功です。

-HTKをコンパイルします。
#geshi(bash){{
chmod 777 $HOME/HTS/htk/*
./configure --prefix=$HOME/HTS/htk/
make
make install
}}
--コンパイルに成功したら、$HOME/HTS/htk 内に実行ファイルの入ったディレクトリ bin が作られます。
--%%[[ここ:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/92.html#qc0725d1]] を参考に、起動時に自動的にパスが通るようにしておきます。%%

***SPTK [#j458a50d]
-[[SPTK:http://sp-tk.sourceforge.net/]]
--Speech Signal Processing Toolkit (SPTK)
--2012/4/4 時点の最新バージョン SPTK-3.5.tar.gz をダウンロードしました。

-SPTKをコンパイルします。
#geshi(bash){{
mkdir $HOME/HTS/SPTK
cd $HOME/HTS/SPTK-3.5
chmod 777 $HOME/HTS/SPTK-3.5/*
./configure --prefix=$HOME/HTS/SPTK/
make
make install
}}

***OpenFst [#j15438b8]
-[[OpenFst:http://www.openfst.org/]]
--重み付き有限状態トランスデューサー (WFST) を扱うライブラリ
--Download より openfst-1.3.1.tar.gz をダウンロードしました。
--2012/4/4 時点のバージョン : Version 1.3.1

-OpenFstをコンパイルします。
#geshi(bash){{
mkdir $HOME/HTS/openfst/
cd $HOME/HTS/openfst-1.3.1
chmod 777 $HOME/HTS/openfst-1.3.1/*
./configure --prefix=$HOME/HTS/openfst/
make
make install
}}
--最初に実行したときは、./configure の時点で「compiler cannot create executables」エラーが出たので、[[ここ:http://yakinikunotare.boo.jp/orebase/index.php?Ubuntu10.04%2F%C1%EB%BB%C8%A4%A4%A4%CE%CD%AB%DD%B5%A4%F2%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB]] を参考に build-essential パッケージを入れたら(apt-get install build-essential)、うまくいきました。

***ActiveTcl [#b3d10b7e]
-[[ActiveTcl:http://downloads.activestate.com/ActiveTcl/]]
--F0解析(Tcl/Tk の中のgetf0)、デモプログラムで使用
--64bit版 ActiveTcl8.4.19.6.295590-linux-x86_64 をダウンロードしました。
---マニュアルによれば ActiveTcl 8.5. 以降は該当プログラム(Snack((Snack は Praat に並ぶ有名な音声解析のフリーソフトであるようです。例えば[[MATLAB Note/音声の分析/VoiceSauce/特徴量の計算方法の詳細:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/112.html#y3dc4337]]を参照。)))が入っていないため、8.4 以前をインストールする必要があります。

-ActiveTclをコンパイルします。
#geshi(bash){{
mkdir $HOME/HTS/ActiveTcl
cd $HOME/HTS/ActiveTcl8.4.19.6.295590-linux-x86_64
chmod 777 $HOME/HTS/ActiveTcl8.4.19.6.295590-linux-x86_64/*
chmod 777 $HOME/HTS/ActiveTcl8.4.19.6.295590-linux-x86_64/payload/*
chmod 777 $HOME/HTS/ActiveTcl8.4.19.6.295590-linux-x86_64/payload/bin/*
sh install.sh
(指示に従って操作、インストールディレクトリは (ホームディレクトリ)/HTS/ActiveTcl/ を指定)
}}

***Festival [#a23b8ad5]
-[[Festival:http://www.cstr.ed.ac.uk/projects/festival/]]
--テキスト解析器([[参考:http://d.hatena.ne.jp/masaking/20050131/p1]])、話者適応学習で使用
--[ download ] > In Europe より festival-2.1-release.tar.gz と speech_tools-2.1-release.tar.gz をダウンロードしました。
---&color(red){''注'':以下のマニュアルでは、2012/04/04現在 Festival のインストールに成功していません。};

-[[インストールマニュアル:http://festvox.org/docs/manual-1.4.3/festival_6.html]] に従ってFestivalをコンパイルします。
#geshi(bash){{
mv $HOME/HTS/festival $HOME/HTS/festival_source
mkdir $HOME/HTS/festival/
cd $HOME/HTS/festival_source
chmod 777 $HOME/HTS/festival_source/*
./configure --prefix=$HOME/HTS/festival/
make
make install
}}
--&color(red){つくりかけ。うまくいきません。};
--&color(red){[[Festival install/音声合成ソフトウェアインストール手順:http://www7b.biglobe.ne.jp/~bprince/poems/finstall.html]] を参考にインストール検討中};
---[[SIOD: Scheme in One Defun:http://people.delphiforums.com/gjc/siod.html]] をダウンロードしてインストール
---以下のエラー。
 slibu.c:1031: error: conflicting types for `lchmod'
 /usr/include/sys/stat.h:261: error: previous declaration of `lchmod'
 make[2]: *** [slibu.o] error 1
---関係ありそうな掲示板 → [[1:http://webcache.googleusercontent.com/search?q=cache:aI0w754OsxAJ:knoppix.ru/talk/viewtopic.php%3Ff%3D4%26t%3D4476+slibu.c:1031:+error:+conflicting+types+for+%E2%80%98lchmod%E2%80%99&cd=1&hl=ja&ct=clnk&gl=jp&source=www.google.co.jp]] [[2:http://webcache.googleusercontent.com/search?q=cache:Kgjo0iXgLfcJ:www.rhinocerus.net/forum/lang-scheme/259610-how-make-siod.html+slibu.o+error&cd=10&hl=ja&ct=clnk&gl=jp&source=www.google.co.jp]]

**サンプルデータを使った音声合成(HMMテキスト音声合成システム OpenJTalk) [#n2f88a25]
-はじめに、[[hts_engine APIのインストール:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#jd6fa8d8]] と [[Open JTalkのインストール:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#we2af101]] をすませておきます。
-サンプル音響モデルを適用
--hts_voice_nitech_jp_atr503_m001-1.04 の中身を $HOME/HTS/open_jtalk/bin 以下におく。
#geshi(bash){{
cp $HOME/HTS/hts_voice_nitech_jp_atr503_m001-1.04/* $HOME/HTS/open_jtalk/bin
}}
--なお音響モデルを自分で構築する方法は、[[音響モデルの学習:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#y8096a4a]]を参照して下さい。

-話す内容のテキストを作る
#geshi(bash){{
cd $HOME/HTS/open_jtalk/bin
emacs input.txt
(適当な文字列を作る)
}}
--サンプル &ref(input.txt);
---文字コードは EUC にしてください。

-サンプルプログラムを実行してみます。
--$HOME/HTS/open_jtalk/bin で以下を実行(参考:[[Open JTalk をVS2005でコンパイルしてみた:http://naoh16.seesaa.net/article/140482825.html]])。
#geshi(bash){{
cd $HOME/HTS/open_jtalk/bin
./open_jtalk -td tree-dur.inf -tf tree-lf0.inf -tm tree-mgc.inf -md dur.pdf -mf lf0.pdf -mm mgc.pdf -df lf0.win1 -df lf0.win2 -df lf0.win3 -dm mgc.win1 -dm mgc.win2 -dm mgc.win3 -cf gv-lf0.pdf -cm gv-mgc.pdf -ef tree-gv-lf0.inf -em tree-gv-mgc.inf -k gv-switch.inf -ow output.wav -x $HOME/HTS/open_jtalk/dic ./input.txt
}}
--[[引数の詳細(「OpenJTalkを使ってみる」):http://www.lowlevellife.com/?p=360]]
---これらの引数は hts_engine が要求しているもの(音響モデルサンプルの INSTALL を参照)。 → [[hts_engine のマニュアル:http://sourceforge.net/projects/hts-engine/files/hts_engine%20API/hts_engine_API-1.03/hts_engine_API_reference-1.03.pdf/download]]
--同じディレクトリに output.wav ができます。
--サンプル &ref(output.wav);

**音響モデルの学習 [#y8096a4a]
-HTSの音響モデルの学習を行う(話者依存学習)方法について。
-はじめに、[[Festival以外のプログラムを全てインストール:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#h155bc58]] しておきます。

***デモプログラムを試す [#a350a8c1]
-[[ここ:http://hts.sp.nitech.ac.jp/?Download]] から、Speaker dependent training demo > Japanese > Normal demo > HTS-demo_NIT-ATR503-M001.tar.bz2 をダウンロードします。
--解凍して、中にある INSTALL に従ってインストール
#geshi(bash){{
cd $HOME/HTS/HTS-demo_NIT-ATR503-M001
chmod 777 $HOME/HTS/HTS-demo_NIT-ATR503-M001/*
./configure --with-tcl-search-path=$HOME/HTS/ActiveTcl/bin --with-sptk-search-path=$HOME/HTS/SPTK/bin --with-hts-search-path=$HOME/HTS/htk/bin --with-hts-engine-search-path=$HOME/HTS/hts_engine_API/bin --with-openfst-search-path=$HOME/HTS/openfst/bin
make
}}
---引数の詳細 &ref(help_HTS-demo_NIT-ATR503-M001.txt);
---「doesn't support snack」エラーが出たときは、libsnack2 を apt-get するか、[[ActiveTclのバージョンを確認:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#b3d10b7e]]して下さい。

--学習が開始される。
---表示されるテキスト(20ファイルのみで試した例): &ref(run_HTS-demo_NIT-ATR503-M001.txt);
---"Extracting f0" フェイズで「Unable to open mixer /dev/mixer」と出ている。解析失敗?
---"Extracting MGC coefficients" と "Extracting f0" のフェイズではrawディレクトリ内の拡張子.rawのファイルを順番に解析している(HTS-demo_NIT-ATR503-M001/data/Makefile.in による)。"Composing training data" フェイズでは data/mgc に記述されたファイルを順番に処理している。
--上が完了してもHTKの学習(scripts/Training.pl)が完了していなかったので((パーミッションの問題か、パスの問題?))、続いて以下を実行する。
#geshi(bash){{
cd $HOME/HTS/HTS-demo_NIT-ATR503-M001
chmod 777 scripts/*
scripts/Training.pl scripts/Config.pm
}}
---/HTS-demo_NIT-ATR503-M001/data/labels/gen 以下のラベルファイルを読み込んで同名の raw ファイルを解析している?
---OpenJTalk で読める形式(hts_engine API の入力形式)の音響モデル(拡張子 pdf)は HTS-demo_NIT-ATR503-M001/voices/qst001/ver1 に出力される。
---&color(red){ここで作った音響モデルを [[OpenJTalk に読み込ませる:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#n2f88a25]]ことができる。};open_jtalk を実行する際の引数を変えればOK。(('''[[英語の音響モデルに置き換える:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?JUNK#w7b8df6f]]'''ことも検討してみましたが、今のところうまくいっていません。))  → &ref(output_atr.wav);

//***手動で学習させる((本セクションの記述は菊池研究室の宮島崇浩研究員の報告に基づきます。)) [#cefbcb38]


**音響モデルの適応 [#m3850131]
-&color(red){''【ご注意】以下は最後までできていません。''};
-はじめに、[[全てのプログラムをインストール:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/108.html#h155bc58]] しておきます。
-[[ここ:http://hts.sp.nitech.ac.jp/?Download]] から、Speaker adaptation/adaptive training demo > English > STRAIGHT demo > HTS-demo_CMU-ARCTIC-ADAPT_STRAIGHT.tar.bz2
--STRAIGHTおよびMATLABの実行環境がない場合は、HTS-demo_CMU-ARCTIC-ADAPT.tar.bz2 を使ってください。
--解凍して、中にある INSTALL に従ってインストール

//*謝辞 [#n7098cc3]
//-本マニュアルの執筆は菊池研究室の宮島崇浩研究員と協力して行いました。誠にありがとうございました。