Open JTalk 1.11のインストール(on Ubuntu)

Discord用のBotでも利用している、オープンソースの日本語合成音声ソフトウェアであるOpen JTalkをインストールします。

新しいものはパッケージマネージャーでサクッとインストールできません。TTS BOT用のDockerコンテナを作り始めていて記憶の新しい今のうちにまとめておきます。最新版(1.11)がリリースされたのが2018年12月28日らしくて、意外と最近。

Open JTalkについて

公式サイト
デモページ(任意の文字列を実際に音声にしてくれます。)

Open JTalkとは、名古屋工業大学によって開発されている、日本語のTTS(Text To Speech)システムです。CとC++で書かれていて(多分)、Linux上でコンパイルして利用することができます。

ただ、前提となるソフトウェアがあったり、辞書ファイルや音声ファイルを別途ダウンロードして配置しないといけなかったり、、、地味にめんどくさいです。普段どれだけパッケージマネージャに助けられてるかがよくわかる。

今回は、そんなちょこっとややこしいOpen JTalkのインストールと、簡単な使い方について、まとめておきます。

実はaptでもいける

実は、”apt-get install open-jtalk” でインストールできるっちゃできます。ですが、バージョンがOpenJTalkは1.10なのはともかく、辞書ファイルがだいぶ古かったり、結局meiちゃんの声は別でダウンロードしないといけないので、今回は全部ソースからコンパイルしていきます。

以下の内容がサッパリという方は、apt-getを使ってもいいかもしれません。その場合は辞書ファイルと音声ファイルのみダウンロードして、引数で指定すれば使えると思います。(やってないので細かいとこはわかりません)

いざインストール

環境とか

  • Ubuntu 18.04 LTS

現在、DockerのUbuntuで作業しているため、Ubuntuのコマンドで作業していきます。CentOSでもapt-getをyumに変えれば大体同じだと思います。

大抵の人には関係ないと思いますが、alpineでのコンパイルが私には無理でした。もし解決方法をご存知の方がいたら教えてください。

インストールするものたち

バージョンが変わっても数字さえ差し替えれば同様にインストールできるはずです。hts_engine上でOpen JTalkが動いていて、さらに辞書ファイルと音声ファイルがそれぞれ必要になってきます。

音声ファイルは最低一つ必要です。 最低限話せればいいという場合は最後のMMDAgent “Sample Script”(MMD Agent Example)は必要ありませんが、そこに入っているmeiという音声データが可愛いので個人的にオススメです。(詳しくは後述)

  • hts_engine API version 1.10 (December 25, 2015)
  • Open JTalk version 1.11 (25 December, 2018) 
  • Dictionary for Open JTalk version 1.11 (25 December, 2018) 
  • HTS voice version 1.05 (25 December, 2012)
  • MMDAgent “Sample Script” version 1.8 (December 25, 2018)

大まかな手順

ざっと以下のような流れになります。慣れてる人にはなんてこと無い作業かもしれませんが、不慣れな私には結構効きます。

  1. apt-getで必要なものをインストール
  2. hts_engineをインストール
  3. Open JTalkをインストール
  4. 辞書ファイルをダウンロード
  5. 音声ファイルをダウンロード

1. apt-get で必要なものをインストール

要はbuild-essentialが欲しいだけです。中身はgccとg++とmakeですね。それから、ソースコードをダウンロードするためのcurl, 音声ファイルに解凍用にunzipをインストールします。

また、以下基本ルート権限があるものとして書いていきます。適当にsudoしたりしながら作業してください。

$ apt-get update
$ apt get install -y build-essential curl unzip

2. hts_engineをインストール

ソースコードをダウンロードしてmakeします。始めにcdするディレクトリはどこでも問題ないです。

別バージョンが欲しい場合は、”1.10″の部分を書き換えればいけるはず。

$ cd /usr/local/src/
$ curl -SLO http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.10.tar.gz
$ tar -zxvf hts_engine_API-1.10.tar.gz
$ cd hts_engine_API-1.10
$ ./configure
$ make
$ make install

3. Open JTalkをインストール

hts_engineとほぼ同じですが、hts_engineの関連のパスを指定する必要があります。こちらもバージョンの数字(1.11)を差し替えれば別バージョンでもいけるはず。

$ cd /usr/local/src/
$ curl -SLO http://downloads.sourceforge.net/open-jtalk/open_jtalk-1.11.tar.gz
$ tar -zxvf open_jtalk-1.11.tar.gz
$ cd open_jtalk-1.11
$ ./configure --with-hts-engine-header-path=/usr/local/include --with-hts-engine-library-path=/usr/local/lib
$ make
$ make install

4. 辞書ファイルをダウンロード

ダウンロードして配置します。配置する場所はどこでもいいですが、Open JTalkを実行する際は必ず必要になるので、わかりやすいところに入れておきましょう。

今回は、/usr/share/open_jtalk/doc 内に格納します。バージョンが隠れるのが嫌な人は、そのままのディレクトリ名でもいいかも。

$ mkdir -p /usr/share/open_jtalk/dic
$ curl -SLO http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.11.tar.gz
$ tar -zxvf open_jtalk_dic_utf_8-1.11.tar.gz
$ cp -r open_jtalk_dic_utf_8-1.11/* /usr/share/open_jtalk/doc

5. 音声ファイルをダウンロード

辞書ファイルと同様です。ただ、こちらはどんな声で喋らせたいかによって、ダウンロードする音声ファイルが違ってきます。デモページで試してみるのがわかりやすいです。個人的なおすすめはmeiです。

今回はm001と、meiのダウンロード方法を書いておきます。

m001

$ mkdir -p /usr/share/open_jtalk/voice/m001
$ curl -SLO http://downloads.sourceforge.net/open-jtalk/hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
$ tar -zxvf hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
$ cp hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice  /usr/share/open_jtalk/voices/m001/m001.htsvoice

mei

$ mkdir -p /usr/share/open_jtalk/voice/mei
$ curl -SLO https://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.8/MMDAgent_Example-1.8.zip
$ unzip MMDAgent_Example-1.8.zip
$ cp MMDAgent_Example-1.8/Voice/mei/*.htsvoice /usr/share/open_jtalk/voices/mei/

いざ実行

オプションを指定して実行した後、標準入力で読み上げてほしいテキストを流す必要があります。今回はPython3で書いてます。

辞書ファイルと音声ファイルのパスは、適宜読み替えてください。

以下を “jtalk.py” とかで保存して実行すると、’open_jtalk.wav’ というファイルの中に、「こんにちは」という音声が生成されているはず。

import subprocess

def jtalk(t):
    open_jtalk=['open_jtalk']
    mech=['-x', '/usr/share/open_jtalk/dic']
    htsvoice=['-m', '/usr/share/open_jtalk/voices/mei/mei_normal']
    speed=['-r', '1.0']
    pitch=['-fm', '0.0']
    vtype=['-a', '0.55']
    outwav=['-ow', 'open_jtalk.wav']
    cmd=open_jtalk+mech+htsvoice+speed+pitch+vtype+outwav
    c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
    c.stdin.write(t.encode('utf-8'))
    c.stdin.close()
    c.wait()

if __name__ == '__main__':
    message = 'こんにちは!'
    jtalk(message)

これで、好き勝手に音声を生成させて遊べる。

かず猫

インターネット初心者です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください