python で音声合成

(2024-06-23)

以前, gtts で音声を合成したことがありました。

とても簡単なのですが、女性の声しかなく男性の声は設定されていませんでした。

これ全然悪くないのですが、python による音声合成をネット検索してみると、Parler-TTS という最新の音声合成方法があるようです。

Parler-TTS のインストール

pip install git+https://github.com/huggingface/parler-tts.git

おそらく 3 GB のかなり巨大なファイル群がインストールされます。

GitHub にあるコードを少し変更して実行してみます。

from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
import torch
device = "cpu"
if torch.cuda.is_available():
device = "cuda:0"
if torch.backends.mps.is_available():
device = "mps"
if torch.xpu.is_available():
device = "xpu"
torch_dtype = torch.float16 if device != "cpu" else torch.float32
model = ParlerTTSForConditionalGeneration.from_pretrained("parler-tts/parler_tts_mini_v0.1").to(device, dtype=torch_dtype)
tokenizer = AutoTokenizer.from_pretrained("parler-tts/parler_tts_mini_v0.1")
prompt = "A female speaker with a slightly low-pitched voice delivers her words quite expressively, in a very confined sounding environment with clear audio quality."
description = "A female speaker with a slightly low-pitched voice delivers her words quite expressively, in a very confined sounding environment with clear audio quality. She speaks very fast."
input_ids = tokenizer(description, return_tensors="pt").input_ids.to(device)
prompt_input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device)
generation = model.generate(input_ids=input_ids, prompt_input_ids=prompt_input_ids).to(torch.float32)
audio_arr = generation.cpu().numpy().squeeze()
sf.write("parler_tts_out.wav", audio_arr, model.config.sampling_rate)

ものすごく時間がかかります。私のコンピュータでは 1 分以上かかりました。

多分この英語のレベルはとても高いのでしょう。

gtts による合成音声は、

生成時間は 1 - 2 秒です。

ただし、Parler-TTS は今のところ日本語には対応していないようです。

テザリング環境で、日本語対応していない Parler-TTS をダウンロードして 3 GB も使ってしまったのは痛いです。

gTTS とは

gTTS を本格的に使ったことはないのですが、いくつかのテキストを音声に変換してみるとかなりレベルが高いことがわかります。

gTTS は Google Text-to-Speech の略で、継続的に更新されているため、新しい技術を取り入れられているようです。 なので、ネット環境が必要です。

ネット上の読み上げソフト

ネット上の読み上げソフトをいくつか試してみましたが、いろいろ面倒な部分もあり、発音も gTTS に比べて特に優れているわけではないようです。

今後は gTTS で音声合成をしたいと思います。

amazon polly

かなり以前、amazon polly を使って英語の音声ファイルをたくさん作ったことがありました。 かなり大量に作成したので、100 万語を越えて課金されてしまいました。

最初の注意書きをよく読んでなかったので、いきなり課金されたと思いちょっとびっくりしました。

当時は amazon polly が最も質が高いと評価されていたようですが、今でもやはりレベルは高いようです。

これは「ニューラル」を選択しています。とても自然ですね。

語数がそれほど多くなければ、amazon polly がいいかもしれません。