人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

Open JTalkで音声合成

前回は、音声認識エンジンJulius(2013/7/6)を試してみましたが、今回は、オープンソースで開発されている音声合成エンジンのOpen JTalkで遊んでみました。こちらも日本の大学が中心になって開発しているようです。そのわりにページが全部英語で敷居の高さを感じるんだけど(笑)

動作環境は、Mac OS X Mountain Lionです。64bit環境なのでインストールにいろいろ苦労しました・・・

今回は、とりあえず音声を出すことを目的とし、hts_engine_APIとOpen JTalkの関連などはあとで実験しながら勉強していこうと思います。

hts_engine_APIのインストール

hts_engine_APIはコンテキストラベル系列と音響モデルを入力として、スペクトル・基本周波数・時間長などのパラメータ系列を生成するエンジンです。hts_engine_API単体では、任意の自然言語の文章をコンテキストラベル系列に変換したり、生成したパラメータ系列を音声にする機能はありません。

2013/9/21現在だと1.07 (2012/12/25公開版)が最新なのですが、64bitに対応していないらしく、実行時に下のようなエラーが起きます。macportsで入れられるhts_engine_APIも同様です。

Error: HTS_calloc: Cannot allocate memory.

調査したところフォーラムのメーリングリストにCVSにある最新版なら64bitに対応しているとの情報を発見。とうことでCVSから最新版をチェックアウトしてインストール。

% cvs -d:pserver:anonymous@hts-engine.cvs.sourceforge.net:/cvsroot/hts-engine login
% cvs -z3 -d:pserver:anonymous@hts-engine.cvs.sourceforge.net:/cvsroot/hts-engine co -P hts_engine_API
% cd hts_engine_API/src
% touch ChangeLog
% aclocal
% automake -a -c
% autoconf
% ./configure
% make
% sudo make install

cvsのloginでパスワードを聴かれたけど入力しないでエンターでOKでした。完了すると

/usr/local/bin/hts_engine
/usr/local/lib/libHTSEngine.a
/usr/local/include/HTS_engine.h

の3つのファイルがインストールされます。

Open JTalkのインストール

次に、Open JTalk本体をインストールします。こちらは、コンテキストラベルの系列ではなく、日本語の文章を入力として、合成音を出力する完全なTTS(Text-to-Speech)エンジンです。日本語文章を解析してコンテキストラベル系列に変換する言語解析機能や、hts_engine_APIのパラメータ系列から合成音を生成するボコーダの機能を内蔵しているのだと思います。

Open JTalk 1.0.6(2012/12/25版)をダウンロードしました。こちらは、64bitにも対応しているらしく特に問題は起きませんでした。configureで先ほどインストールしたhts_engine_APIの場所を指定します。日本語の文字コードは、UTF-8にしました。

% tar open_jtalk-1.06.tar.gz
% cd open_jtalk-1.06/
% ./configure --with-hts-engine-header-path=/usr/local/include --with-hts-engine-library-path=/usr/local/lib --with-charset=UTF-8
% make
% make install

完了すると

/usr/local/bin/open_jtalk
/usr/local/dic

がインストールされます。dicの中には言語解析で使う辞書が入っているようです。

音響モデルのダウンロード

Open JTalkのサイトでは、Nitech Japanese Speech Databaseというサンプルの音響モデルが公開されているのでダウンロードしてきます。解凍するとnitech_jp_atr503_m001.htsvoiceという音響モデルのファイルが入ってます。ファイル名から推察するに名工大(nitech)の学生さんか誰かが、ATR503文を読んで作ったんでしょうね。

tar xvzf hts_voice_nitech_jp_atr503_m001-1.05.tar.gz

Open JTalkで音声合成

準備が整ったのでさっそく音声合成してみます。まず、読み上げたい任意のテキストを書いたファイル(sample.txt)を用意します。文字コードは、UTF-8です。

% cat sample1.txt
オープンソースで開発されている音声合成エンジンのOpen JTalkで遊んでみました。

言語解析用辞書、音響モデル、テキストファイルを入力として、合成音声を出力してみます。-mオプションで音響モデルを、-xオプションで言語解析辞書の場所を、-owオプションで出力先ファイルを指定します。

% open_jtalk -m nitech_jp_atr503_m001.htsvoice -x /usr/local/dic -ow sample1.wav sample1.txt

Open JTalk 1.0.6からopen_jtalkコマンドの引数仕様が大きく変わっていました。Web上の多くの情報が1.0.5以前のものなのでかなり混乱しました・・・1.0.5までは、スペクトルモデル、基本周波数モデル、時間長モデルを個別に指定していたのに対し、1.0.6からはそれらを1つにまとめた.htsvoiceファイルを1つだけ指定するようになっています*1

何もエラーが出なければ、合成成功!さっそく、sample1.wavを再生してみましょう。

The Nitech Japanese Speech Database "NIT ATR503 M001"
Copyright (c) 2003-2012 Nagoya Insitute of Technology

怖ーーーー。ちょっと別の文章でも試してみよう。ATR503文から最初の10文。

The Nitech Japanese Speech Database "NIT ATR503 M001"
Copyright (c) 2003-2012 Nagoya Insitute of Technology

けっこうちゃんと読み上げてます。ときどき時間長がおかしくなるみたいだけど。音響モデルがあまりよくないのかな?

Open JTalkのデモページを見るとMeiさんという女性の声も使えるみたいです。この音響モデルはOpen JTalkのページにはないのですが、MMDAgentという別のプロジェクトのデモプログラムから手に入るそうです。次回、試してみます。

*1:先ほどインストールしたhts_engine_API 1.0.7も同様に.htsvoiceファイルで音響モデルを指定するように修正されています