LoginSignup
3
2

More than 3 years have passed since last update.

WSL(Ubuntu18.04LTS)でHTSデモスクリプトをとりあえず動かすまで

Last updated at Posted at 2020-05-05

概要

本記事では、Windows10のWSL(Windows Subsystem for Linux)に、名古屋工業大学の音声合成システムHTS1をインストールし、実際にデモスクリプトを動かすまでの手順を示します。

検証に使用したPC、WSLの情報は以下の通りです。

  • 検証PC
    • OS: Windows 10 Home Ver.1909 64bit
    • CPU: Intel Core i7 920 2.67GHz
    • メモリ: 24.0GB
  • WSL
    • バージョン: WSL1
    • ディストリビューション: Ubuntu 18.04.4 LTS

0.WSL及びUbuntuの初期設定等

WSLの設定は他に良い解説ページが多くありますので割愛します。著者は以下を参考に設定しました。
http://www.aise.ics.saitama-u.ac.jp/~gotoh/UbuntuOnWSL.html

設定のうち、少なくとも以下は終了している前提です。上記リンクの見出し構成に合わせています。

  • WSLの有効化
  • Ubuntu 18.04(LTS)のインストールおよび初期設定
    • インストール
    • 初期設定
      • インストールされているソフトウェアの更新(apt update, apt upgrade)
      • 日本語環境の設定
      • タイムゾーンを日本(JST)にする
      • Manの日本語化
  • X Windowの起動(Windows側からLinuxソフトウェアを別画面表示する)
    • VcxSrvのインストール
    • Ubuntu上でのXserverの起動
  • 日本語環境を整える
    • WSL上のUbuntu18.04でのEmacs
      • Emacsのインストール

1. 追加の設定

Windowsのよく使うフォルダへリンクを作成

ホームディレクトリ(~/)にWindows側へシンボリックリンクを貼る(以下はデスクトップの例)

$ ln -s /mnt/c/Users/(ホスト名)/Desktop/ ~/Desktop

デフォルトのファイルパーミッションを変更

設定ファイル~/.bashrcに新規作成ファイルの権限を指定する。2

umask 022によりグループユーザ及び他ユーザの権限を、読み取り&実行(755)もしくは読み取りのみ(644)に変更する。
~/.bashrcは次回からUbuntu(bash)起動時に実行されるので、毎回以下のsourceを実行する必要はない。

$ echo 'umask 022' >> ~/.bashrc # 必ず>>で追記とすること
$ source ~/.bashrc  # 追記した設定ファイルを再度実行する

ちなみに、注釈の参考記事では~/.profileに追記しているが、上記のように~/.bashrcに記載しても実現できる。

ビルドに必要なパッケージをインストール

build-essentialパッケージ(gccmakeperl等)をインストールする。

$ sudo apt -y install build-essential

csh(C Shell)をインストール

tcsh(cshの上位互換)をインストールする。

$ sudo apt -y install tcsh

autoconfをインストール

configureの実行に必要なautoconfをインストールする。同時に、automakeautotools-devm4もインストールされる。

$ sudo apt -y install autoconf

Windows環境変数の読み込み無効化

WSLのコンフィグファイル/etc/wsl.confを新規作成し、Windows環境変数を読み込まないようにする。3

$ sudo touch /etc/wsl.conf  # root権限でファイルを新規作成
$ sudo emacs /etc/wsl.conf &

立ち上げたemacsで以下を記載する。4

/etc/wsl.conf
[interop]
appendWindowsPath = false

Ctrl-x Ctrl-sで保存し、Ctrl-c Ctrl-sでemacsを閉じる。

Windowsの[スタート]>[Windows管理ツール]>[サービス]を起動し、以下の画像の通りにLxssManagerを再起動する。
lxssManager.jpg

Ubuntuを再起動する。

2. SPTKのインストール

HTSデモスクリプトのINSTALLにはSPTK-3.9を指定しているが、3.9はインストールエラーが発生したのでSPTK-3.11をインストールする(3.11でデモスクリプト動作確認済)

ダウンロード

SPTK公式からSource Code: SPTK-3.11をDLし、Ubuntuへコピーする。

$ cp ~/(Windowsフォルダへのシンボリックリンク)/SPTK-3.11.tar.gz  ~/

インストール

デフォルトでは/usr/local/にインストールされる。

./configure --prefix=インストール先でホームディレクトリ以下の任意の場所にインストールしてもよい。SPTKコマンドはコマンドラインで使用することも多いため、以下のどちらかをおすすめする。

  • 元々PATHの通っているデフォルト(/usr/local/)にインストールする
  • ホームディレクトリ以下の任意の場所にインストールし、 export PATH="$PATH:インストール先/bin"でPATHを通す
$ tar -zxvf SPTK-3.11.tar.gz
$ cd SPTK-3.11
$ ./configure  # --prefix=インストール先 で指定可能
$ make
$ sudo make install

3. HTSのインストール

!!注意!!
HLMToolsのMakefile.inで、以下のif前がTAB空白ではなく"半角スペース×8"となっており、makeがエラーで停止する(Ubuntuだけ?)
HLMToolsを解凍したら最初にemacsで該当箇所をTAB空白に修正すること。

htk/HLMTools/Makefile.in
mkinstalldir:
□□□□□□□□if [ ! -d $(bindir) -a X_ = X_yes ] ; then mkdir -p $(bindir) ; fi

念の為、変更前のバックアップファイルを削除する。

$ rm htk/HLMTools/Makefile.in~ # バックアップファイルを削除する

ダウンロード

HTK、HDecode

HTK公式からHTK-3.4.1、HDecode-3.4.1をDLする(要登録)
こちらの記事が詳しいので参考にして欲しい。
https://qiita.com/kiat/items/e51918cd49210df23f76

HTS

HTS公式からメニューのdownloadを選び、HTS-2.3のSource code: HTS-2.3_for_HTK-3.4.1をDLする。

3ファイルをWindowsのフォルダからUbuntuへコピーする。

$ cp ~/(Windowsフォルダへのシンボリックリンク)/HTK-3.4.1.tar.gz  ~/
$ cp ~/(Windowsフォルダへのシンボリックリンク)/HDecode-3.4.1.tar.gz  ~/
$ cp ~/(Windowsフォルダへのシンボリックリンク)/HTS-2.3_for_HTK-3.4.1.tar.bz2  ~/

HTSパッチの適応及びインストール

デフォルトでは/usr/local/HTS-2.3/にインストールされる。

./configure --prefix=インストール先でホームディレクトリ以下の任意の場所にインストールしてもよい。ただし、HTSコマンドはコマンドラインで使うことがほとんどないため、PATHの通っている/usr/local/にインストールする意味はあまりない。

HTSのINSTALLには記載されていないが、configureCFLAGSオプションに以下を指定しないとエラーで停止するので注意(Ubuntuだけ?) 5

$ tar -zxvf HTK-3.4.1.tar.gz
$ tar -zxvf HDecode-3.4.1.tar.gz
$ tar -jxvf HTS-2.3_for_HTK-3.4.1.tar.bz2 # bzip2で圧縮されているのでオプションはj
$ mv HTS-2.3_for_HTK-3.4.1.patch htk
$ cd htk
$ patch -p1 -d . < HTS-2.3_for_HTK-3.4.1.patch # -d後の.(カレントディレクトリ)を忘れない
$ ./configure CFLAGS="-DARCH=linux"  # --prefix=インストール先 で指定可能
$ make all
$ sudo make install
$ sudo make hlmtools install-hlmtools
$ sudo make hdecode install-hdecode

4. hts_engine APIのインストール

ダウンロード

hts_engine API公式からhts_engine_API-1.10をDLし、Ubuntuへコピーする。

$ cp ~/(Windowsフォルダへのシンボリックリンク)/hts_engine_API-1.10.tar.gz  ~/

インストール

デフォルトでは/usr/local/にインストールされる。

./configure --prefix=インストール先でホームディレクトリ以下の任意の場所にインストールしてもよいが、解凍したhts_engine_API-1.10ディレクトリ直下にはインストールできないので注意。

$ tar -zxvf hts_engine_API-1.10.tar.gz
$ cd hts_engine_API-1.10
$ ./configure  # --prefix=インストール先 で指定可能
$ make
$ make install

5. HTSデモスクリプトを動かす

!!注意!!
特徴量抽出及び学習データ作成(make data)まで問題ないが、学習及び合成(make voice)は開始直後にエラーで停止するので、デモスクリプトを解凍したら最初にMakefile.inを書き換えること(コマンドラインで直接実行する場合も同様)

原因: perl5.26でperlモジュール(.pm)の検索先リスト(@INC)からカレントディレクトリ"."が削除され、Config.pmが見つからなかったため。詳しくは以下のページを参照のこと。
https://tutorial.perlzemi.com/blog/20170414149217.html

同ディレクトリにconfigureがあるMakefile.inのターゲットvoice部分について、script/Config.pmを./script/Config.pmに書き換える。

HTS-demo_NIT_ATR503-M001/Makefile.in
voice:
        echo "Running a training/synthesis perl script (Training.pl) in background...."
#       @PERL@ scripts/Training.pl scripts/Config.pm > log 2>&1 &
        @PERL@ scripts/Training.pl ./scripts/Config.pm > log 2>&1 &

念の為、変更前のバックアップファイルを削除する。

$ rm HTS-demo_NIT_ATR503-M001/Makefile.in~ # バックアップファイルを削除する

HTSデモスクリプトのダウンロード(ATR503文男性)

HTS公式からメニューのdownloadを選び、HTS-2.3のSpeaker dependent training demo: Japanese HTS-demo_NIT-ATR503-M001をDLし、Ubuntuへコピーして解凍する。

$ cp ~/(Windowsフォルダへのシンボリックリンク)/HTS-demo_NIT-ATR503-M001.tar.bz2  ~/
$ tar -jxvf HTS-demo_NIT-ATR503-M001.tar.bz2

パラメータ設定及び学習スクリプト実行

SPTK、HTS、hts_engine APIをデフォルトの場所にインストールした場合は以下のパスを指定する。それ以外は各々のコマンドがあるディレクトリを指定する。

記事末尾のおまけにあるconf.shを使用するとconfigureがラクかもしれない。
(以下のオプションに該当する変数3つにパスを記載してシェルスクリプトを実行)

$ ./configure --sptk-search-path=/usr/local/bin \ 
      --hts-search-path=/usr/local/HTS-2.3/bin \
      --hts-engine-search-path=/usr/local/bin
$ make data  # 特徴量抽出及び学習データ作成
$ make voice # 学習及び合成

終わりに

これで"とりあえずは"HTSデモスクリプトが最後まで動くはずです。
著者の環境では、make dataに約1時間、make voiceに約4時間半かかりました。
日本語歌声デモスクリプトは全部で12時間くらいかかりました。

おまけ

上記のデモスクリプトで、configureのオプションをコマンドラインでいちいち指定するのは非常に面倒です。

そこで、オプションに対応する変数を定義し、連結して実行するシェルスクリプト: conf.shを作りました。簡単な使い方と機能を記載したreadmeも同梱しています。どうぞお使いください。
OneDrive https://1drv.ms/f/s!AoplgFa8hZqvnQ632m8coFlWTCMh


  1. HMM-Based Speech Synthesis System → H Triple S 

  2. WSL(Windows Subsystem for Linux)の初期パーミッション設定: https://qiita.com/minwinmin/items/bf1664fc861932db884c 

  3. WSLでWindowsのPATHを引き継がないようにする方法: https://qiita.com/raccy/items/456a7158f588670c0850 

  4. Ubuntu側からWindows側のプログラムを実行したくない場合は、上記ファイルにenabled = falseを記載する 

  5. 救世主降臨: https://stackoverflow.com/questions/37719890/install-hts-2-3-for-htk-3-4-1-on-ubuntu-16-04-has-error/37826366 

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2