#0.前提条件
- Windows 10 Pro
- HTS Engine API 1.10
- Open JTalk 1.10
- Visual Studio 2017 Community
#1. ダウンロード
HTSエンジンとOpen JTalk及び音源をダウンロードしてきます。
その後、各アーカイブを解凍しておきます(7zipを使用しました)。
https://sourceforge.net/projects/hts-engine/
hts_engine_API-1.10.tar.gz
https://sourceforge.net/projects/open-jtalk/
open_jtalk-1.10.tar.gz
[Files]→[HTS voice]→[hts_voice_nitech_jp_atr503_m001-1.05]
hts_voice_nitech_jp_atr503_m001-1.05.tar.gz
#2. HTSエンジンのビルド
「VS 2017用 x64 Native Tools コマンドプロンプト」を開いて、HTSエンジンのフォルダに移動します。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>d:
D:\>cd Develop\open-jtalk\hts_engine_API-1.10
移動したら、nmakeコマンドでビルドします。
D:\Develop\open-jtalk\hts_engine_API-1.10>nmake -f Makefile.mak
#3. Open JTalkのビルド
次にOpen JTalkをビルドします。
bin\Makefile.makにHTSエンジンのデフォルトのインストールパス(C:\hts_engine_API)が明記されています。
そこで、このパスをHTSビルド時の環境(D:\Develop\open-jtalk\hts_engine_API-1.10)に修正します。
※HTSビルド時に「**nmake -f Makefile.mak install」している場合は、修正不要です。
CC = cl
CL = link
CFLAGS = /O2 /Ob2 /Oi /Ot /Oy /GT /GL /TC
/I..\text2mecab
/I ..\mecab\src
/I ..\mecab2njd
/I ..\njd
/I ..\njd_set_pronunciation
/I ..\njd_set_digit
/I ..\njd_set_accent_phrase
/I ..\njd_set_accent_type
/I ..\njd_set_unvoiced_vowel
/I ..\njd_set_long_vowel
/I ..\njd2jpcommon
/I ..\jpcommon
/I D:\Develop\open-jtalk\hts_engine_API-1.10\include
LFLAGS = /LTCG
LIBS = ..\text2mecab\text2mecab.lib
..\mecab\src\mecab.lib
..\mecab2njd\mecab2njd.lib
..\njd\njd.lib
..\njd_set_pronunciation\njd_set_pronunciation.lib
..\njd_set_digit\njd_set_digit.lib
..\njd_set_accent_phrase\njd_set_accent_phrase.lib
..\njd_set_accent_type\njd_set_accent_type.lib
..\njd_set_unvoiced_vowel\njd_set_unvoiced_vowel.lib
..\njd_set_long_vowel\njd_set_long_vowel.lib
..\njd2jpcommon\njd2jpcommon.lib
..\jpcommon\jpcommon.lib
D:\Develop\open-jtalk\hts_engine_API-1.10\lib\hts_engine_API.lib
winmm.lib
Advapi32.lib
all: open_jtalk.exe
open_jtalk.exe : open_jtalk.obj
$(CC) $(CFLAGS) /c $(@B).c
$(CL) $(LFLAGS) /OUT:$@ $(LIBS) $(@B).obj
clean:
del *.exe
del *.obj
修正が終わったら、nmakeでビルドします。
D:\Develop\open-jtalk\open_jtalk-1.10>nmake -f Makefile.mak
mecab-naist-jdicのビルドで以下のようなエラーが発生しました。
:
:
Copyright (C) Microsoft Corporation. All rights reserved.
コード生成しています。
コード生成が終了しました。
cd ..
cd mecab-naist-jdic
nmake /f Makefile.mak
Microsoft(R) Program Maintenance Utility Version 14.14.26431.0
Copyright (C) Microsoft Corporation. All rights reserved.
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.14.26428\bin\HostX64\x64\nmake.EXE"' : リターン コード '0x2'
Stop.
mecab-naist-jdic を参照してみるとxxx_.defファイルが全てアンダーバー付きのファイル名になっていました。
そこで、以下のようにファイルをコピーする構文をmakefileに追加しました。
all: char.bin matrix.bin sys.dic unk.dic
char.bin matrix.bin sys.dic unk.dic: naist-jdic.csv matrix.def left-id.def pos-id.def rewrite.def right-id.def char.def unk.def feature.def
..\mecab\src\mecab-dict-index.exe -d . -o . -f UTF-8 -t sjis
clean:
del char.bin matrix.bin sys.dic unk.dic
all: char.bin matrix.bin sys.dic unk.dic
left-id.def: _left-id.def
copy _left-id.def left-id.def
pos-id.def: _pos-id.def
copy _pos-id.def pos-id.def
rewrite.def: _rewrite.def
copy _rewrite.def rewrite.def
right-id.def: _right-id.def
copy _right-id.def right-id.def
char.bin matrix.bin sys.dic unk.dic: naist-jdic.csv matrix.def left-id.def pos-id.def rewrite.def right-id.def char.def unk.def feature.def
..\mecab\src\mecab-dict-index.exe -d . -o . -f UTF-8 -t sjis
clean:
del char.bin matrix.bin sys.dic unk.dic
再度、nmakeすると無事ビルドが完了しました。
#4. 動作確認
open_jtalk-1.10\bin フォルダに移動して、input.txt にSJISコードで合成したいテキストを保存します。
以下のコマンドを実行するとoutput.wavに合成音声が出力されます。
D:\Develop\open-jtalk\open_jtalk-1.10\bin>open_jtalk.exe -m ..\..\hts_voice_nitech_jp_atr503_m001-1.05\nitech_jp_atr503_m001.htsvoice -x ..\mecab-naist-jdic -ow output.wav input.txt
尚、-m の指定は音源ファイル、-x の指定は辞書ファイルとなります。
#5. 女性の音声を合成
nitech_jp_atr503_m001.htsvoice は男性の音声でしたが、女性の音声を試してみます。
MMDAgentでmeiという女性音源が入手できます。
MMDAgent "Sample Script" version 1.7 (December 25, 2016)のSource codeリンクから、MMDAgent_Example-1.7.zipをダウンロードして展開します。
Voice フォルダの中にいくつか音源ファイルが入っていますので、いずれかを -m オプションで指定すると、女性の合成音声が生成されます。
D:\Develop\open-jtalk\open_jtalk-1.10\bin>open_jtalk.exe -m D:\Develop\MMDAgent\MMDAgent_Example-1.7\MMDAgent_Example-1.7\Voice\mei\mei_happy.htsvoice -x ..\mecab-naist-jdic -ow output.wav input.txt
#参考にさせて頂いたページ
Windowsで音声合成Open JTalk @mkgask さん
以上となります。