CentOS 7.3 に Open JTalk 1.10 をインストールする

Pocket

Open JTalk は日本語音声合成ソフトウェアです。
インストール方法は先人の偉大な記事があるのでそちらを大いに参考にさせていただきました。

  1. Raspberry Piにしゃべらせてみた(OpenJTalk 1.08、.htsvoiceファイル対応): Raspberry Piでやってみた

私は最新バージョン原理主義者(とくにネットワーク機器のファームウェアは)ここでは現時点での最新版のインストール方法を紹介しています。
弊社のスーパー Software Engineer 田中からスクリプトは流用させてもらっています。
私の作った PHP はデモ用なので良い子は真似しないでね。

インストール

大抵のファイルは公式から最新ソースもってこれます。
いい感じに読み替えてください。

  1. Open JTalk
  2. hts_engine API

hts_engine API(version 1.10)のインストール

EPEL のパッケージに “paco“ ないんで飛ばしています。。
数分と書いてあったけど数秒で終わった。
時代は変わったなあ。

[wataru@localhost ~]$ cd /usr/local/src/
[wataru@localhost src]$ sudo wget https://downloads.sourceforge.net/project/hts-engine/hts_engine%20API/hts_engine_API-1.10/hts_engine_API-1.10.tar.gz
[wataru@localhost src]$ sudo tar xvzf hts_engine_API-1.10.tar.gz
[wataru@localhost src]$ cd /usr/local/src/hts_engine_API-1.10
[wataru@localhost hts_engine_API-1.09]$ sudo ./configure
[wataru@localhost hts_engine_API-1.09]$ sudo make
[wataru@localhost hts_engine_API-1.09]$ sudo make install

Open JTalk(version 1.10)のインストール

[wataru@localhost ~]$ cd /usr/local/src/
[wataru@localhost src]$ sudo wget https://downloads.sourceforge.net/project/open-jtalk/Open%20JTalk/open_jtalk-1.10/open_jtalk-1.10.tar.gz
[wataru@localhost src]$ sudo tar xvzf open_jtalk-1.10.tar.gz
[wataru@localhost src]$ cd /usr/local/src/open_jtalk-1.10
[wataru@localhost open_jtalk-1.10]$ sudo ./configure --with-charset=UTF-8
(snip)
checking if g++ supports template  (required)... configure: WARNING: g++ template  does not work

checking if g++ supports const_cast<> (required)... configure: WARNING: g++ const_cast<> does not work

checking if g++ supports static_cast<> (required)... configure: WARNING: g++ static_cast<> does not work

checking if g++ supports dynamic_cast<> (required)... configure: WARNING: g++ dynamic_cast<> does not work

checking if g++ supports reinterpret_cast<> (required)... configure: WARNING: g++ reinterpret_cast<> does not work

checking if g++ supports exception handler (required)... configure: WARNING: g++ exception does not work

checking if g++ supports namespaces (required) ... no
checking if g++ environment provides all required features... no
configure: error: Your compiler is not powerful enough to compile MeCab.                  If it should be, see config.log for more information of why it failed.

こけた。。

g++ 入れればええんやろ。

[wataru@localhost open_jtalk-1.10]$ sudo yum -y groupinstall "Development Tools"
[wataru@localhost open_jtalk-1.10]$ sudo ./configure --with-charset=UTF-8
[wataru@localhost open_jtalk-1.10]$ sudo make
[wataru@localhost open_jtalk-1.10]$ sudo make install

辞書ファイルの入手

上で UTF-8 サポート入りでインストールしているので UTF-8 版をインストール。

[wataru@localhost ~]$ cd /usr/local/src/
[wataru@localhost src]$ sudo wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.10.tar.gz
[wataru@localhost src]$ sudo tar xvzf open_jtalk_dic_utf_8-1.10.tar.gz
[wataru@localhost src]$ sudo mkdir /usr/local/share/open_jtalk
[wataru@localhost src]$ sudo mv /usr/local/src/open_jtalk_dic_utf_8-1.10 /usr/local/share/open_jtalk/

MMDAgent 音声ファイルの入手

ここで最新が手に入ります。

  1. mmdagent.jp
$ sudo wget http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip
$ sudo unzip MMDAgent_Example-1.7.zip
$ sudo mkdir /usr/local/share/hts_voice
$ sudo mv /usr/local/src/MMDAgent_Example-1.7/Voice/mei /usr/local/share/hts_voice/

以下は 160 MB 近くあって結構重いです。
たぶん不要。

$ sudo wget http://sourceforge.net/projects/mmdagent/files/MMDAgent/MMDAgent-1.7/MMDAgent-1.7.zip

スクリプト

再生までやる

[wataru@localhost src]$ sudo vim /usr/local/bin/jsay

/usr/local/bin/jsay

サーバーはしゃべれないのであまり意味のないコマンドかもしれない。
元ファイルはこちらから拝借させていただきました。
どうもありがとうございます。

#!/bin/sh
 
# 引数チェック
CMDNAME=`basename $0`
if [ $# -lt 1 ]; then
    echo "Usage: ${CMDNAME} [ text ]" 1>&2
    exit 1
fi
 
 
# 定数定義(出力ファイル名、辞書の場所、音声データの場所)
TMPFILE=`mktemp /tmp/tmp.XXXXXXXX.wav`
DIC=/usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.10/
VOICE=/usr/local/share/hts_voice/mei/mei_normal.htsvoice
 
 
# 音声データ生成
echo "$1" | open_jtalk \
-x ${DIC} \
-m ${VOICE} \
-ow ${TMPFILE} && \
 
 
# 生成した音声データを再生する
aplay --quiet ${TMPFILE}
 
 
# 生成した音声データを削除する
rm -f ${TMPFILE}
 
# 終了
exit 0
[wataru@localhost src]$ sudo chmod 755 /usr/local/bin/jsay

音声データを生成しておわり

[wataru@localhost src]$ sudo vim /usr/local/bin/jsay_make

/usr/local/bin/jsay_make

#!/bin/sh


# 引数チェック
CMDNAME=`basename $0`
if [ $# -lt 1 ]; then
    echo "Usage: ${CMDNAME} [ text ]" 1>&2
    exit 1
fi

# 定数定義(出力ファイル名、辞書の場所、音声データの場所)
TMPFILE=$2
DIC=/usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.10
VOICE=/usr/local/share/hts_voice/mei/mei_normal.htsvoice


# 音声データ生成
echo "$1" | open_jtalk \
-x ${DIC} \
-m ${VOICE} \
-ow ${TMPFILE}

# 終了
exit 0
[wataru@localhost src]$ sudo chmod 755 /usr/local/bin/jsay_make

叩いてみる

[wataru@localhost ~]$ time jsay_make "こんにちは。こちらはユニキャストサーバーです。"
/usr/local/bin/jsay_make: 24 行: 18701 終了                  echo "$1"
     18702 Segmentation fault      | open_jtalk -x ${DIC} -m ${VOICE} -ow ${TMPFILE}

real    0m0.034s
user    0m0.025s
sys     0m0.009s

セグフォって死んだ。。。

単純に第2引数の TMPFILE がなかったからだった。。。

[wataru@localhost ~]$ time jsay_make "こんにちは。こちらはユニキャストサーバーです。" ~/hello.wav

real    0m0.301s
user    0m0.295s
sys     0m0.007s
[wataru@localhost ~]$ ls -l hello.wav 
-rw-rw-r-- 1 wataru wataru 347564  3月 17 12:43 hello.wav

できた!

scp でダウンロードする。
開く。

シャァベッタァァァァァァァ

Web から叩けるようにする

今回はサーバー用の VM から当然直接音声は流せません。(いろいろ工夫すれば流せるんだと思うけど。。)

デモ用スクリプト


使い方

以下を叩くと指定した GET パラメータの日本語で合成された名工大の mei ちゃんの声で voice.wav というファイルがダウンロードされます。

http://voice.example.com/?message=こんにちは

References

  1. Raspberry Piにしゃべらせてみた(OpenJTalk 1.08、.htsvoiceファイル対応): Raspberry Piでやってみた
  2. Open JTalk
  3. hts_engine API
  4. mmdagent.jp

投稿者紹介

Wataru Noguchi
* Bio: Software Engineer, Network and Server Engineer
* Certification:
IPA: FE, AP, Network Specialist
Cisco: CCNA R&S, CCNP R&S
LPI: LPIC Level1, Level2, LPIC-3 Specialty LPI-304 Virtualization &High Availability

コメントを残す

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

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