最終更新日:2023年4月14日
はじめに
以前「Open JTalk」を使って同様のことをしました。touch-sp.hatenablog.com
今回は「ESPnet」というのを使わせて頂きました。
両者の結果が比較できるようにこの記事の最後に音声ファイルをのせておきます。
良かったら聞き比べてください。
PC環境
RTX 3060 Laptopを搭載したノートPCで動作確認しました。こちらのPCです。Python3.10ではうまくいきませんでした。
Ubuntu 20.04 on WSL2 Python 3.8.10
Ubuntu内にCUDA 11.3.1をインストールしてtorch==1.11.0+cu113を使っています。
CUDA 11.3.1のインストールはNVIDIA公式通りに行っています。
Python環境構築
CMakeが必要です。あらかじめUbuntu内にインストールしました。
sudo apt install cmake
おそらくpython3-devも必要です。
sudo apt install python3-dev
Python環境の構築はpipのみで可能でした。
(pipは最新のものにアップデートしておく必要があります)
pip install torch==1.11.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113 pip install espnet pip install pyopenjtalk pip install espnet_model_zoo
Pythonスクリプト
テキストファイルから音声ファイルを作成するために以下のスクリプトを書きました。import argparse import numpy as np import torch from espnet2.bin.tts_inference import Text2Speech from espnet2.utils.types import str_or_none parser = argparse.ArgumentParser() parser.add_argument('input_filename', help='input text file name') parser.add_argument('output_filename', help='output wave file name') args = parser.parse_args() input_fname = args.input_filename output_fname = args.output_filename text2speech = Text2Speech.from_pretrained( model_tag=str_or_none('kan-bayashi/jsut_full_band_vits_prosody'), vocoder_tag=str_or_none('none'), device="cuda" ) pause = np.zeros(30000, dtype=np.float32) with open(input_fname, 'r') as f: x = f.read() sentence_list = x.split('<pause>') wav_list = [] for sentence in sentence_list: with torch.no_grad(): result = text2speech(sentence)["wav"] wav_list.append(np.concatenate([result.view(-1).cpu().numpy(), pause])) final_wav = np.concatenate(wav_list) from scipy.io.wavfile import write write(output_fname, rate=text2speech.fs, data=final_wav)
用意するテキストファイル
このようなテキストファイルを用意しました。首都はキャンベラ。<pause> 世界一のサンゴ礁、グレートバリアリーフが有名。
テキスト中にpauseを挿入するとそこで間をあける(無音をはさむ)ようになっています。
使い方
上記Pythonスクリプトを「tts.py」としています。python tts.py <テキストファイル名> <出力するファイル名>
例として
python tts.py sample.txt output.wav
以下のような警告が出ましたが動作には影響ないようです。
UserWarning: Cython version is not available. Fallback to 'EXPERIMETAL' numba version. If you want to use the cython version, please build it as follows: `cd espnet2/gan_tts/vits/monotonic_align; python setup.py build_ext --inplace`
インストールされたライブラリのバージョン
appdirs==1.4.4 audioread==2.1.9 certifi==2022.6.15 cffi==1.15.1 charset-normalizer==2.1.0 ci-sdr==0.0.0 click==8.1.3 ConfigArgParse==1.5.3 ctc-segmentation==1.7.1 Cython==0.29.30 decorator==5.1.1 Distance==0.1.3 einops==0.4.1 espnet==202205 espnet-model-zoo==0.1.7 espnet-tts-frontend==0.0.3 fast-bss-eval==0.1.3 filelock==3.7.1 g2p-en==2.1.0 h5py==3.7.0 huggingface-hub==0.8.1 humanfriendly==10.0 idna==3.3 inflect==5.6.0 jaconv==0.3 jamo==0.4.1 joblib==1.1.0 kaldiio==2.17.2 librosa==0.9.2 llvmlite==0.38.1 nltk==3.7 numba==0.55.2 numpy==1.22.4 packaging==21.3 pandas==1.4.3 pkg_resources==0.0.0 pooch==1.6.0 pycparser==2.21 pyopenjtalk==0.2.0 pyparsing==3.0.9 pypinyin==0.44.0 python-dateutil==2.8.2 pytorch-wpe==0.0.1 pytz==2022.1 pyworld==0.3.0 PyYAML==6.0 regex==2022.6.2 requests==2.28.1 resampy==0.3.1 scikit-learn==1.1.1 scipy==1.8.1 sentencepiece==0.1.96 six==1.16.0 SoundFile==0.10.3.post1 threadpoolctl==3.1.0 torch==1.11.0+cu113 torch-complex==0.4.3 tqdm==4.64.0 typeguard==2.13.3 typing_extensions==4.3.0 Unidecode==1.3.4 urllib3==1.26.10
その他の環境
2022年7月9日追記①(torch==1.12.0+cu113)
PyTorchを1.11.0+cu113から1.12.0+cu113にアップデートしても問題なく動作しました。2022年7月9日追記②(torch==1.12.0+cu116)
Ubuntu内のCUDAを11.3.1から11.6.2にアップデートした後にPyTorchを1.12.0+cu113から1.12.0+cu116にアップデートしました。問題なく動作しました。CUDAのインストールはNVIDIA公式通りに行っています。2023年2月11日追記(torch==1.13.1+cu116)
pyopenjtalk==0.3.0ではうまくいきませんでした。pip install torch==1.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116 pip install espnet==202301 pip install pyopenjtalk==0.2.0 pip install espnet-model-zoo==0.1.7
Ubuntu 20.04 on WSL2のPython3.8とPython3.9で動作確認できました。
2023年4月14日追記(torch==1.13.1+cu117)
Ubuntu 22.04 on WSL2のPython3.10で動作確認できました。こちらです。
2022年7月12日追記
続きの記事を書きました。touch-sp.hatenablog.com