Windowsで音声合成Open JTalk

# 事前準備

ソースコードからフルビルドするので、Microsoft Visual Studioが必要です。

Visual Studio Community - Visual Studio
https://www.microsoft.com/ja-jp/dev/products/community.aspx

無料のCommunityエディションで大丈夫。ビルドに時間はかかりません。

中でもVisual C++が必要なので、Visual Studioのインストール時に選択すること。

Visual Studio入ってるけどVisual C++入ってないって人は、Visual Studio起動して、
ファイルメニューの「ツール」から「ツールと機能を取得」で、
「C++によるデスクトップ開発」をインストール出来ます。

また、tar.gzを解凍できるツールをご準備ください。


## HTSエンジンをDL

### hts_engine_API-1.10.tar.gz

hts_engine download | SourceForge.net
https://sourceforge.net/projects/hts-engine/

ちょっとスクロールして、Project Activityから、
hts_engine_API-1.10.tar.gzのように名前にAPIと入っているファイルをDL。

見当たらなかったらメニューのFilesからhts_engine APIに入れば見つかるはず。



## Open JTalkをDL

### open_jtalk-1.10.tar.gz

Open JTalk download | SourceForge.net
https://sourceforge.net/projects/open-jtalk/

緑色のDownloadボタンからopen_jtalk-1.10.tar.gzをDL。

### open_jtalk_dic_shift_jis-1.10.tar.gz

前項のサイトから、ちょっとスクロールして、Project Activityから、
open_jtalk_dic_shift_jis-1.10.tar.gzをDL。

本当はUTF-8でやれたら良かったんだけど、WindowsではShift JISでないとダメなようなので泣く泣くShift JISを選択しました。

（2023/12/09追記：UTF-8でのビルド方法を[コメントをいただきました](https://qiita.com/mkgask/items/0bf9c26dc96e7b0b45ac#comment-b15787a8014176c18e78)。この場合open_jtalk_dic_utf_8-1.11.tar.gzをダウンロードすればいいはず）

### hts_voice_nitech_jp_atr503_m001-1.05.tar.gz

前項のサイトから、メニューのFilesからHTS Voiceディレクトリに入り、
hts_voice_nitech_jp_atr503_m001-1.05ディレクトリの、
hts_voice_nitech_jp_atr503_m001-1.05.tar.gzをDL。



## hts_engine_APIをビルド

DLしておいたhts_engine_API-1.10.tar.gzを解凍。

解凍先ディレクトリのパスが2バイト文字を含んでいると面倒なことが起こる時があるので、
2バイト文字を含まないディレクトリに移動しておくと楽です。

以降はコマンドプロンプトで、解凍後のファイル一式が入っているディレクトリに移動して、

```
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary/Build/vcvarsall.bat" x64
nmake -f Makefile.mak
nmake -f Makefile.mak install
```

筆者は横着してGit Bashでやろうとしたらvcvarsall.batの結果を環境変数に適用できず、
nmakeが動かせなくてコマンドプロンプトを立ち上げました。無念。

ビルドが完了すると、C:\hts_engine_API が出来上がっています。
この中のincludeディレクトリにあるヘッダファイル等をOpen JTalkのビルドで利用する模様。



## Open JTalkをビルド

DLしておいたopen_jtalk-1.10.tar.gzを解凍

ディレクトリを移動して、さっきと同じく

```
nmake -f Makefile.mak
nmake -f Makefile.mak install
```

すると今度は、

```
cd ..
cd mecab-naist-jdic
nmake /f Makefile.mak
```

で処理が止まって、

```
NMAKE : fatal error U1073: 'left-id.def' のビルド方法が指定されていません。
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\nmake.EXE"' : リターン コード '0x2'
Stop.
```

でエラーが出ました。

が、色々確認したり試したりした結果、ビルドがここまで進んでいればC:\open_jtalk\bin\open_jtalk.exeの生成には成功しており、
辞書データファイルの生成に失敗しているだけで、辞書データファイルは別途DLしたものを使用するため、
このエラーは無視しても支障ないようです。

*ggっても他にこのエラーが出てる方は見当たらなかったので、筆者の環境の問題の可能性が高そうです。*

（2021/08/08追記：このエラーについて問題箇所の可能性がある部分を[コメントいただきました](https://qiita.com/mkgask/items/0bf9c26dc96e7b0b45ac#comment-edb981ce3ae2c297905d)。検証はしていないのでご自身でご確認ください）

（2021/09/07追記：上記コメントの修正でうまくいったという[コメントをいただきました](https://qiita.com/mkgask/items/0bf9c26dc96e7b0b45ac#comment-c6d2a75135304df006de)。漢字の読みも改善されたとのことで、手間をかけても辞書データもビルドしたほうが良いかもしれません）

## Open JTalkの稼動準備

### 辞書データファイルの準備

open_jtalk_dic_shift_jis-1.10.tar.gzを解凍して、ディレクトリ名を「dic」に変更し、
C:\open_jtalk\binにディレクトリごとコピー。

### 音響モデルファイルの準備

hts_voice_nitech_jp_atr503_m001-1.05.tar.gzを解凍して、出てきたファイルの中から
nitech_jp_atr503_m001.htsvoiceをC:\open_jtalk\binにコピー。
こちらは一式ではなくファイル単体で良いので注意。


## Open JTalkの動作テスト

Shift JISの辞書データファイルを選択したので、入力用のテキストファイルもShift JISで記述します。
C:\open_jtalk\bin直下にinput.txtを作成し、テスト再生用のテキストを保存。

コマンドプロンプトから

```
open_jtalk.exe -m nitech_jp_atr503_m001.htsvoice -x dic -ow output.wav input.txt
```

を実行。

生成されたoutput.wavを再生すると、某CeVIOの某タカハシさんに似た男性声で音声が再生されます。

UTF-8の辞書データファイルで、テスト用のテキストファイルをUTF-8で書いてもダメだったので、
Windowsでは内部処理自体がShift JISに依存しているのではと愚考していますが、それ以上は調べてないので詳細は分からず。

（2023/12/09追記：辞書ファイルのLDのところでも書きましたが、UTF-8でのビルド方法を[コメントをいただきました](https://qiita.com/mkgask/items/0bf9c26dc96e7b0b45ac#comment-b15787a8014176c18e78)。Makefile.makファイルの修正が必要とのこと）

## 女性の声に変更

MMDAgent - Toolkit for Building Voice Interactoin Systems
http://mmdagent.sourceforge.net/

から、Sample ScriptのほうのSource CodeをDL。
解凍して出てきたファイルのVoice/meiディレクトリにhtsvoiceファイルがいくつか入っているので、
このディレクトリをもらってきます。
C:\open_jtalk\binにmeiディレクトリをコピー。

```
open_jtalk.exe -m mei/mei_normal.htsvoice -x dic -ow output.wav input.txt
```

を実行すると、今度はoutput.wavで女性声が再生されます。


## ライセンス

|対象|ライセンス|
|:-:|:-:|
|hts_engine_API|Modified BSD license|
|Open JTalk|Modified BSD license|
|男性ボイス|Creative Commons Attribution 3.0|
|女性ボイス|Creative Commons Attribution 3.0|

*誤りがあればご指摘ください*


## 参考資料

Open JTalkをWindowsでビルドして動かしてみる - 真実の楽譜（フルスコア）
http://truthfullscore.hatenablog.com/entry/2015/05/31/102221

Raspberry piで日本語音声合成(Open JTalk)を試してみる。 - Qiita
http://qiita.com/lutecia16v/items/8d220885082e40ace252#%E5%A5%B3%E6%80%A7%E3%81%AE%E5%A3%B0%E3%81%AB%E5%A4%89%E3%81%88%E3%81%A6%E3%81%BF%E3%82%8B