「日本語テキストの音声合成をプログラムで行いたい」
「PythonからOpen JTalkを操作したい」
このような場合には、pyopenjtalkがオススメです。
この記事では、pyopenjtalkについて解説しています。
本記事の内容
- pyopenjtalkとは?
- pyopenjtalkのシステム要件
- pyopenjtalkのインストール
- pyopenjtalkの動作確認
それでは、上記に沿って解説していきます。
pyopenjtalkとは?
pyopenjtalkとは、Open JTalkのPythonラッパーです。
pyopenjtalkは、次のコンポーネントで構成されています。
- Open JTalk
- HTS engine
Open JTalkは、テキスト処理を行います。
次のページでOpen JTalkのデモが公開されています。
Open JTalk – HMM-based Text-to-Speech System
https://open-jtalk.sp.nitech.ac.jp/
そして、HTS engineを用いて音声合成を処理します。
音声合成のエンジン自体は、HTS engineになるということです。
構成的には、Pythonから見えるのはOpen JTalkになります。
そして、Open JTalkがHTS engineとやり取りをするという形です。
また、これらはpyopenjtalkをインストールすると一緒にインストールされます。
正確には、インストール時にビルドを行うことでバイナリが生成されています。
なお、Open JTalkとHTS engineはpyopenjtalk用に修正されています。
Python上で動作しやすいように修正されていたりするのでしょう。
このような事情があるからこそ、pyopenjtalkのインストールは少し厄介です。
Windowsにもインストール可能ですが、macOSやLinux向けとはビルド環境が異なります。
以上、pyopenjtalkについて説明しました。
次は、pyopenjtalkのシステム要件を説明します。
pyopenjtalkのシステム要件
現時点(2022年11月)でのpyopenjtalkの最新バージョンは、0.3.0となります。
この最新バージョンは、2022年9月8日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows(※)
- macOS
- Linux
(※)macOSやLinuxよりは、面倒と言えます。
https://github.com/r9y9/pyopenjtalk/pull/13
サポート対象となるPythonのバージョンは、以下。
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
これは、以下のPython公式開発サイクルとほぼ同じです。
バージョン | リリース日 | サポート期限 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
3.11 | 2022年10月25日 | 2027年10月 |
次回バージョンからは、Python 3.11にも対応することでしょう。
Pythonバージョンは、Python公式開発サイクルに従っていれば問題ありません。
問題になるのは、以下です。
Windowsの場合は、上記で記したリンク先を確認してください。
- C/C++ compilers (to build C/C++ extentions)
- Cmake
- Cython
maxOSとLinuxの場合には、これらがシステム要件として必要になるのです。
これらを以下で説明します。
C/C++ compilers
C/C++ compilersは、C/C++コンパイラ(gcc/g++)のことです。
C/C++ compilersについては、次の記事で説明しています。
インストールしていない場合は、上記記事を参考にインストールしましょう。
Cmake
インストール済みであれば、次のようにバージョンが表示されます。
$ cmake --version cmake version 3.10.2 CMake suite maintained and supported by Kitware (kitware.com/cmake).
インストールは、次のコマンドを実行するだけです。
$ sudo apt install -y cmake
Cython
pyopenjtalk 0.2.0以前は、事前にインストールが必要となります。
Cythonが事前にインストールされていないと、pyopenjtalk のインストールに失敗します。
しかし、pyopenjtalk 0.3.0からはその必要がありません。
pyopenjtalk をインストールする際に、Cythonも同時にインストールされます。
そうだとしても、どのみちCythonが必要であることに変わりはありません。
したがって、事前にインストールしておきましょう。
pip install Cython
まとめ
基本的には、pyopenjtalkはmacOSとLinuxで動くことが想定されています。
そのため、この記事でもmacOSとLinuxの場合について説明しました。
Windowsの場合は、リンク先のページをご覧ください。
以上、pyopenjtalkのシステム要件を説明しました。
次は、pyopenjtalkのインストールを説明します。
pyopenjtalkのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.10.8
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- Cython 0.29.32 pip 22.3.1 setuptools 63.2.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、pyopenjtalkのインストールです。
pyopenjtalkのインストールは、以下のコマンドとなります。
pip install pyopenjtalk
システム要件を満たしていれば、処理が進みます。
終了したら、どんなパッケージがインストールされたのかを確認します。
$ pip list Package Version ----------- ------- Cython 0.29.32 numpy 1.23.4 pip 22.3.1 pyopenjtalk 0.3.0 setuptools 65.5.1 six 1.16.0 tqdm 4.64.1
それほど多くのパッケージには、依存していないようです。
以上、pyopenjtalkのインストールについて説明しました。
最後は、pyopenjtalkの動作確認を行います。
pyopenjtalkの動作確認
pyopenjtalkの動作確認は、次のコードで行います。
import pyopenjtalk print(pyopenjtalk.g2p("こんにちは")) print(pyopenjtalk.g2p("こんにちは", kana=True))
上記コードを実行すると、ファイルのダウンロードが始まります。
このファイルは、Open JTalkで用いる辞書です。
Downloading: "https://github.com/r9y9/open_jtalk/releases/download/v1.11.1/open_jtalk_dic_utf_8-1.11.tar.gz" dic.tar.gz: 100%|██████████████████████████████████████████████████████████████████| 22.6M/22.6M [00:02<00:00, 10.3MB/s]
基本的には、辞書のダウンロードは最初だけと考えてよいでしょう。
そして、コードの実行結果はコンソールに以下が表示されるはずです。
k o N n i ch i w a コンニチワ
このように表示されれば、pyopenjtalkは動作していると言えます。
ただ、これだけでは音声合成の効果がわかりません。
音声合成の効果を確認できるコードも載せておきます。
import pyopenjtalk import numpy as np from scipy.io import wavfile x, sr = pyopenjtalk.tts("音声合成の効果を確認できるコードも載せておきます。") wavfile.write("test.wav", sr, x.astype(np.int16))
上記を実行するには、追加でScipyが必要となります。
Scipyについては、次の記事で説明しています。
インストールするには、次のコマンドを用います。
pip install scipy
音声合成用のコードを実行すると、「test.wav」が同じディレクトリ上に作成されます。
以上、pyopenjtalkの動作確認を説明しました。