python による音声合成:gTTS

python はとても優秀なコンピュータ言語で、おそらく現在人気ナンバーワンの言語です。

ありとあらゆることができるので、音声合成もできるだろうと思い調べてみました。

現在、pyopenjtalk , Tacotron2 , gTTS の3種類があるようですが、調べてみて gTTS が最もいいと思います。

最も簡単なサンプル

Yahoo ニュースの以下のようなテキストを使用しました。

ロシアによるウクライナ侵略で、アメリカNBCニュースはよっか、複数のアメリカ当局者らの話として、ウクライナを支援する欧米諸国がウクライナ側と停戦について「ひそかに」協議を始めたと伝えた。ウクライナ軍の反攻が進まず戦局が膠着していることや、ウクライナ軍の疲弊、イスラエルとイスラム原理主義組織・ハマスとの交戦などを背景に、欧米側のウクライナ支援の余力が低下していることが背景だとしている。

米当局者とすると「こめとうきょくしゃ」となるので、「米」は「アメリカ」へ変更し、4日は「よんにち」と読むので「よっか」とひらがなに変更してあります。

まずはモジュールをインストール。


pip install gTTS
pip install playsound

pythonは、


from gtts import gTTS
from playsound import playsound
 
text01 = 'ロシアによるウクライナ侵略で、アメリカNBCニュースはよっか、複数のアメリカ当局者らの話として、ウクライナを支援する欧米諸国がウクライナ側と停戦について「ひそかに」協議を始めたと伝えた。ウクライナ軍の反攻が進まず戦局が膠着していることや、ウクライナ軍の疲弊、イスラエルとイスラム原理主義組織・ハマスとの交戦などを背景に、欧米側のウクライナ支援の余力が低下していることが背景だとしている。'

tts = gTTS(text01, lang='ja', slow=False) 
tts.save('def.mp3')
playsound('def.mp3')

出来上がった音声ファイルは、

素晴らしいと思いますが、スピードはこれがデフォルトのようで、他にはもっとゆっくりなモードしかないようです。

再生時間を短くする:ffmpeg で

NHKのアナウンサーぐらいの速度が欲しいので、音声ファイルを ffmpeg で編集しました。
テキストファイルは外部ファイルにしてそれを読み込むようにします。
ここではスピードを 1.3 倍にしました。


from gtts import gTTS
from playsound import playsound
import subprocess
 
textfile = 'test01.txt'

fp_in = open(textfile, encoding='utf-8')
text_aa = fp_in.read()
fp_in.close()
 
tts = gTTS(text_aa, lang='ja', slow=False) 
tts.save('def.mp3')

command = 'ffmpeg -i def.mp3 -af atempo=1.3 output.mp3'
subprocess.call(command, shell=True)

playsound('output.mp3')

結果は、

ほぼ完璧ですね。

少し前までは、音声合成エンジンで最も優秀なものは Amazon Polly だと言われており、私もいろいろと利用してみましたが、やりすぎて最終的には課金されてしまいました。

この python プログラムを利用すればほぼ思い通りの音声が合成できるので、もはや Amazon Polly を利用することはないと思います。