Open JTalkで初音ミクボイスで喋らせる

最近、ディープラーニングばかり試していましたが、少し飽きてきたので、
気分を変えて、Open JTalkを試してみました。

インストール

下記コマンドでインストールします。

sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

音響モデル準備

上記のインストールが終われば、デフォルトの音声で喋らせることはできますが、 ネット上で公開されている音響モデルを使用すると、様々な声に変更することができます。
音響ファイルについては、下記のサイトで紹介されています。

Open JTalk の音響モデルを試す::まほろば

今回は、下記リンク先で公開されているモデルを使用します。

自作音響モデル - MMDAgent & Project-NAIP wiki

上記のファイルはそのままでは使えない為、下記リンク先のプログラムでhtsvoiceファイルに変換します。

htsvoiceへ変換するプログラム: takayanの雑記帳

Windowsであればそのまま使えるようですが、今回はLinuxで使う為、ソースコードをコンパイルします。

sudo apt-get install mono-devel

上記でMonoをインストールし、ソースコードをコンパイルします。

mcs htsvconv.cs

作成されたexeファイルを音響モデルのあるフォルダと同じ場所にコピーし、exeを実行します。

mono htsvconv.exe ./Voice

実行するとVoice.htsvoiceが作成される為、これを音響モデルのある場所に保存します。 私の場合は、フォルダを作成して以下の場所にコピーしました。

/usr/share/hts-voice/miku

これで音響モデルの準備完了です。

実行プログラム

#-*- coding:utf-8 -*-
import subprocess

def jtalk(text) :
  args = [
  "open_jtalk",
  "-x", "/var/lib/mecab/dic/open-jtalk/naist-jdic/",
  "-m", "/usr/share/hts-voice/miku/Voice.htsvoice",
  "-ow", "/tmp/output.wav"]

  p = subprocess.Popen(args, stdin=subprocess.PIPE)
  p.communicate(text)
  p.wait()

  args = [ "aplay", "/tmp/output.wav"]                                                                           
  p = subprocess.Popen(args)
  p.wait()

if __name__ == '__main__' :
  jtalk("本日の天気は晴れです。")

上記プログラムを実行すると、音声が再生されます。
当然、任意の文章を読み上げられるので、ニュースやツイッターのつぶやきを読み上げる等、
色んな使い方ができると思います。