読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習・Deep Learningに関する記事が多いです。



Open JTalkでメイちゃんにしゃべってもらう

音声合成

Open JTalkで音声合成(2013/9/21)の続き。引き続き、音声合成ネタです。

Open JTalkにはデフォルトで前回の男性の声しかついていません。何となくちょっとガッカリ(笑)してたんですが、MMDAgentという別のプロジェクトにメイちゃんという女性の声がついているという情報を見つけました。今回はこのメイちゃんにしゃべってもらいます。

メイちゃんはこんなキャラです。どうやらOpen JTalkを作っている名古屋工業大学のマスコットキャラのようですね。

f:id:aidiary:20131006205004p:plain
Copyright 2009-2012 Nagoya Institute of Technology (MMDAgent Model “Mei”)

メイちゃんの音響モデル

SourceForgeにあるプロジェクトページからMMDAgent_Exampleをダウンロードしてきます。MMDAgentの本体ではなく、Exampleの方なので注意!

解凍したファイルのVoiceディレクトリの中に音響モデルが入っています。

  • mei_normal
  • mei_angry
  • mei_bashful
  • mei_happy
  • mei_sad

の5つの音響モデルです。名前から推察するにどうやら感情音声合成もできるみたいです。

中身を見るとpdf、inf、winなどのファイルが入っていますが、Open JTalk 1.06ではそのままでは使えず、これらのファイルをマージしたhtsvoiceというファイルに変換する必要があります。

音響モデルのフォーマット変換

このフォーマット変換のツール(非公式)が以下のサイトで公開されていましたので今回はそのままお借りします。

htsvoiceへ変換するプログラム
http://neu101.seesaa.net/article/316259910.html

C#のソースコード付きなので中身を読めばどういう風にマージしているか何となくですがわかります。ただし、中のバイナリはWindows用なのでMacで動かすには一工夫必要です。Macでは、monoというライブラリのインストールが必要なのでmacportsでインストール。

sudo port install mono

インストールすると、mcsというC#のコンパイラとmonoという実行環境が入ります。mcsでさっそくソースコードをコンパイル。

mcs htsvconv.cs

htsvconv.exeという実行ファイルができます。使うときはmonoというコマンドの後に実行ファイルを入れます。引数には音響モデルのディレクトリを指定します。5個ともまとめて作成しておきます。

mono htsvconv.exe ./MMDAgent_Example-1.3.1/Voice/mei_normal
mono htsvconv.exe ./MMDAgent_Example-1.3.1/Voice/mei_angry
mono htsvconv.exe ./MMDAgent_Example-1.3.1/Voice/mei_bashful
mono htsvconv.exe ./MMDAgent_Example-1.3.1/Voice/mei_happy 
mono htsvconv.exe ./MMDAgent_Example-1.3.1/Voice/mei_sad 

それぞれ、〜.htsvoiceというファイルができます。これらが音響モデルです。

メイちゃんにしゃべってもらう

open_jtalkに音響モデルと言語辞書を指定して実行します。sample.txtに好きな文章を書いていくつか合成してみました。

open_jtalk -m mei_normal.htsvoice -x /usr/local/dic -ow normal.wav sample.txt
open_jtalk -m mei_angry.htsvoice -x /usr/local/dic -ow angry.wav sample.txt
open_jtalk -m mei_bashful.htsvoice -x /usr/local/dic -ow bashful.wav sample.txt
open_jtalk -m mei_happy.htsvoice -x /usr/local/dic -ow happy.wav sample.txt
open_jtalk -m mei_sad.htsvoice -x /usr/local/dic -ow sad.wav sample.txt

HTS Voice "Mei"
Copyright (c) 2009-2012 Nagoya Institute of Technology

感情もちゃんと出ていてよい感じです。

Open JTalkのデモサイトでもメイちゃんの声が聴けるけど、このデモサイトの方が音質がよいみたい。open_jtalkコマンドのパラメータをいろいろいじってみたけど結局同じ音質にならなかった。デモサイトはもっと改良したバージョンを使ってるのかな?

MMDAgentも興味深いので後で遊んでみたいと思います。

余談

最初、htsvoiceを自力で作ろうとしていろいろ調べていたところ、同じような質問をしていた方をフォーラムで発見。

http://hts.sp.nitech.ac.jp/hts-users/spool/2013/msg00245.html

I had compile the hts_voice_nitech_jp_atr503_m001 retrieved from HTS website. Finally it produced :

dur.pdf
gv-lf0.pdf gv-mgc.pdf gv-switch.inf
lf0.pdf lf0.win1 lf0.win2 lf0.win3
lpf.pdf lpf.win1
mgc.pdf mgc.win1 mgc.win2 mgc.win3
tree-dur.inf
tree-gv-lf0.inf tree-gv-mgc.inf
tree-lf0.inf
tree-lpf.inf
tree-mgc.inf

these files. But the new voice format will combined them into one file called .htsvoice. We can download the compiled 1.05 file and get nitech_jp_atr503_m001.htsvoice. Since hts_engine 1.07 / open jtalk 1.06 using the new format , how can I convert my voice files into new one?

メイちゃんの音響モデルも上のようなファイル群でした。まだ勉強中なので詳細は不明なのだけれど、音素の継続時間長、対数基本周波数(2012/7/7)、メル一般化ケプストラム(2013/3/2)などのモデルとコンテキストクラスタリングした決定木のファイルのようです。open_jtalk 1.05まではこれらをすべてコマンドに指定していたけれど、open_jtalk 1.06からこれらのファイルを1つにまとめた.htsvoiceというファイルを1つだけ使うことになっています。というわけで、これらのファイルから.htsvoiceを作るにはどうしたらよいのか?という質問です。

Please, check make_htsvoice() function in scripts/Training.pl (HTS-2.3
alpha demo script).

HTS-2.3のデモスクリプトを見てねという回答でした。まだ正式な変換スクリプトは用意されてないみたい。

http://hts.sp.nitech.ac.jp/archives/2.3alpha/

にHTS-2.3 alphaがあり、HTS-demo_NIT-ATR503-M001.tar.bz2というファイルの中にTraining.plが入っています。お目当てのmake_htsvoice()を見てしばらく格闘していたのだけれど難しすぎて途中で挫折しました・・・