PythonでのgTTS使い方再確認
読み上げのライブラリ
暗記関係の自習用アプリ、特に語学関係のそれをこしらえようと思ったら、発音の良い「読み上げ機能」は必須。
自分は、Python学習しはじめたころ、文法もクラスもモジュール化もよくわかっていない段階で
こんな試行錯誤をした末
と、ようやく動いた関数をなんちゃってライブラリにしました。myspeech_lib.py という名前で以下を保存
import tempfile
import time
from gtts import gTTS
from pygame import mixer
def myspeech(mylang,mytext):
if mytext != None:
with tempfile.TemporaryFile(delete=True, dir='.', suffix='.mp3') as f:
# 文字列をmp3ファイルに保存
myobj = gTTS(text=mytext, lang=mylang, slow=False)
myobj.write_to_fp(f)
#mp3再生
mixer.init()
f.seek(0)
mixer.music.load(f)
time.sleep(0.3)
mixer.music.play(loops=1)
while mixer.music.get_busy():
time.sleep(0.1)
else:
myspeech('ja',"データが無いようですよ")
クラスでもなく、ただ単に関数一つだけです。
実行する場合は、たとえば
test.py と言う名前で同じフォルダに以下を保存して
from myspeech_lib import myspeech
myspeech("en","Good morning!")
myspeech("zh-TW","早安!")
myspeech("ja","おはよう!")
test.pyを実行すると、"Good morning!"、"早安!"、"おはよう!"、としゃべってくれます。動いてくれるので、このままずっと使ってきました。だけど、ややpythonに慣れてきたところなので、コードを見直しておきたいな、と思った次第。
情報源:
https://gtts.readthedocs.io/en/latest/
最新バージョン2.5.3のリリース日: 2024年8月14日だそうで、頻繁にメンテされているようですね。gTTS、自分のPCに入っていたのはバージョン2.5.1でしたので、更新しました。
使える言語リストの取得
自分が今まで知らなかった使い方として
gtts.lang.tts_langs()
で、使える言語リストがdict型で取得できる、というのがありました。試してみます。
from gtts import lang
print(lang.tts_langs())
>
まあ、いっぱいあるけど自分が使うのは、結局
'ja': 'Japanese'
'en': 'English'
'zh-TW': 'Chinese (Mandarin/Taiwan)'
の三つだけです。
自分が引っかかっていたこと
今回見直そうと思ったのは
while mixer.music.get_busy():
time.sleep(0.1)
sleep を使っていることに引っ掛かりを感じたからです。
コードを眺めてみたら、これはgTTSの使い方の問題ではなくて、出来上がったmp3ファイルをpygameのmixerで再生する際の問題でした。
「Pythonでのpygame使い方(mp3ファイル再生方法)の再確認」が本筋ですね。