PythonからOpen JTalkを操作する【日本語テキストの音声合成】

PythonからOpen JTalkを操作する【日本語テキストの音声合成】 プログラミング

「日本語テキストの音声合成をプログラムで行いたい」
「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.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月
3.112022年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」が同じディレクトリ上に作成されます。

test.wav

以上、pyopenjtalkの動作確認を説明しました。

タイトルとURLをコピーしました