Python で文字列から音声を生成する gTTS モジュール

Python で文字列から音声を生成する gTTS モジュール

文字列から音声を生成

そう多くはないケースですが、弊社案件において簡易的にセリフを自動でコンピュータに喋らせたい機能がありました。
有名なサービスだと、
  • Google Cloud Text-to-Speech
  • Amazon Polly
などがあり、調整することにより、コンピュータでも自然に喋らせることができます。しかしそれなりに料金が掛かりますので、頻繁に利用するとなると運用費が嵩んでしまいます。

gTTS モジュール

gTTS は、 Python で利用できる文字列を音声に変換するモジュールです。
gTTS は Google Text-to-speech の略ですので、ベースとしては Google のサービスが利用されているようです。
使い方は非常に簡単で、直ぐに音声ファイルを作成することができます。
MITライセンスですので商用利用も問題ありません。

実行

それでは実際に使ってみましょう。
今回は gTTS のほかに、音声を再生するために pygame もインストールしました。requirements.txt は次の通りです。

requirements.txt

gTTS==2.2.3
pygame==2.1.2
それでは実際のソースコードを見てみましょう。

main.py

from gtts import gTTS
from pygame import mixer
import time

tts1 = gTTS(text='吾輩は猫である。名前はまだ無い。', lang='ja')
tts1.save('cat1.mp3')

mixer.init()
mixer.music.load('cat1.mp3')
mixer.music.play()
time.sleep(5)
gTTS は 5, 6 行目で利用しています。 gTTS を用い「吾輩は猫である。名前はまだ無い。」を日本語で発音しています。
これを実行すると、「吾輩は猫である。名前はまだ無い。」と発声するでしょう。ただし、如何にもコンピュータに喋らせたようなイントネーションです。
そこで、喋らせるテキストを次のように句読点で句切りました。

main.py

from gtts import gTTS
from pygame import mixer
import time

tts2 = gTTS(text='吾輩は、猫である。名前は、まだ無い。', lang='ja')
tts2.save('cat2.mp3')

mixer.init()
mixer.music.load('cat2.mp3')
mixer.music.play()
time.sleep(5)
文章で書くときは、こんなに細かく句読点を打つことはないと思いますが、これを実行すると、先ほどよりもより自然なイントネーションであることがわかります。

次は英語を聞いてみましょう。
これまでは lang=’ja’ としていたので日本語でしたが、この引数を変更することにより好きな言語で喋らせることができます。
英語で喋らせるには次のようなコードにします。

main.py

from gtts import gTTS
from pygame import mixer
import time

tts3 = gTTS(text='I am a cat. I have, as yet, no name.', lang='en')
tts3.save('cat3.mp3')

mixer.init()
mixer.music.load('cat3.mp3')
mixer.music.play()
time.sleep(5)
具体的には、 lang=’en’ としています。これを実行すると、流暢な英語を聞くことができます。このようにいくつもの言語が用意されています。

英会話のサイトを作っているのであれば、もう少しゆっくりなスピードを好むこともあるでしょう。そんなときは slow オプションを利用します。これは標準で False になっています。

main.py

from gtts import gTTS
from pygame import mixer
import time

tts4 = gTTS(text='I am a cat. I have, as yet, no name.', lang='en', slow=True)
tts4.save('cat4.mp3')

mixer.init()
mixer.music.load('cat4.mp3')
mixer.music.play()
time.sleep(5)
上記を実行すると、英語をゆっくりと話してくれるのが判ります。

また英語は国によってイントネーションが異なります。英語はデフォルトでアメリカのイントネーションですが、次のようにすることでイギリスのイントネーションになります。

main.py

from gtts import gTTS
from pygame import mixer
import time

tts5 = gTTS(text='I am a cat. I have, as yet, no name.', lang='en', tld='co.uk')
tts5.save('cat5.mp3')

mixer.init()
mixer.music.load('cat5.mp3')
mixer.music.play()
time.sleep(5)
具体的には、 tld=’co.uk’ と付加しました。英語(アメリカ)と英語(イギリス)でイントネーションが異なることがよく判ります。

まとめ

今回は、 Python の gTTS モジュールを利用し、文字列を元に音声データを生成できることを紹介しました。無償サービスでここまでできるのは革新的だと感じました。
しかし、同じ Google のサービスである有償の Google Cloud Text-to-Speech などと比較すると見劣りしてしまいますし、 gTTS で作成された日本語音声にはノイズのようなものが含まれることもあります。より自然な音声を求める場合は、有償サービスを利用した方がよさそうです。
音声の質にこだわらないのであれば、利用価値はあると思います。
» エンジニア登録はこちら