さっさと解決策を知りたい方は以下の目次の環境構築まで飛ばしてください
背景
最近テキスト読み上げソフトウェアであるVOICEVOXとその関連ソフトウェアに注目している私です。
VOICEVOXはOSSで開発されており、実際に合成を行うCore部分や、それをラップするEngineなども公開されていて非常に興味深いプロジェクトとなっています。
さて、こういったTTSソフトは何らかの形で入力されたテキストを符号化し、その情報をもとにこねくり回して最終的に音声にするのですが(説明略)、そのテキストから符号化するのにVOICEVOXではpyopenjtalkを使っています。 このpyopenjtalk他にも色んなDNNを用いたTTSの現場でも使われていて、Twitterで見かけた情報ですが(おい)
この中で使われているDNNTTSライブラリ内部でもpyopenjtalkが使われているようです。
研究者の多くの方はUbuntuやそういったLinuxの環境で研究していると思うのですが、ちょっとDNNTTS簡単に行えるのであればやってみたい、みたいなライトユーザだったり、また今回例に挙げたVOICEVOXユーザの多くはWindowsを使っているかと思います。 pyopenjtalk自体はWindows対応しているのですが、正常にインストールすることに失敗している人が多く少しでも助けにならないかと思って以下にメモを残しておきます。
環境構築
このpyopenjtalkをWindowsでインストールするための環境を整えていきます。 ここではPythonが既に使える状態になっていると仮定して進めていきます。
pyopenjtalkを利用にあたりインストールするもの
以上
最小構成にしたい場合は
でも十分だと思います(未検証)
Visual Studio (Build Tools) のセットアップ
上記リンクからダウンロードしたインストーラを起動し、以下の画像のチェックがかかっている項目および下線が引かれているものをインストールします。
これが入っていればビルドに使うツールは揃います。
PATHの設定
システム -> システムの詳細設定 -> 環境変数 -> ~のユーザ環境変数
をたどり、PATHを探して編集画面に移ります。 この辺りは100億記事ぐらいあるので適当に探してください。
で、ここでは上記のインストーラー経由でインストールしたCMakeにPATHを通します。
Visual Studio 2019 Preview Communityをインストールした私は
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
を設定しました。 このPATHにexplorerでアクセスして見つからなかったら周辺を探したりしてください(この記事を見ている多くの人はPreviewなんて入れないのでこのPATHじゃない確率が99%ぐらいです)。
お試し
pyopenjtalkのv0.1.4 (https://github.com/r9y9/pyopenjtalk/commit/dece47d7eec098ce74c5775afcbc11859d81a3ba) 以降で上記の方法でビルドできるようになっているのでインストールしてみましょう。
python3 -m venv .venv . .\.venv\Scripts\activate pip install pyopenjtalk
適当なディレクトリで試してみて動いてそうなら自分の使いたいプロダクトで使っていきましょう。
終わりに
色んな人が頑張ってCMakeを入れたり色んなところ頑張ってPATHを通しているのを見て、やはりWindowsでCythonを使ったライブラリを使うのは面倒だなぁと感じて、とりあえず動かせるようにするための手順を書きなぐりました。 自分が開発している時もこれは大分面倒ではあるので、Cythonの依存をなくしたものを作ったりしています。
で、pyopenjtalkのインストール方法を紹介した後ではありますが自分のライブラリも紹介させてください。
ビルド済みのライブラリをインストール時にダウンロードし、手元でビルドさせることを排除したライブラリとなっています。 またこれは他のライブラリではおそらく実装されていないカスタム辞書読み込み機能などが付いていて、研究用途というよりも、何かしらのプロダクトを作るときに便利機能となっています。
片手間で作っているためラップ出来ている機能は少ないのですが、ぜひ試してみてください。 あとこのAPIさっさとラップしてくれ~みたいのがあったらIssueに残してくれるとよっしゃやるか~みたいになるかもしれません。
そして何よりもコントリビュートお待ちしております。