見出し画像

再利用する

(これはPython勉強の備忘録です。)

やりたいこと

前回作った文字列読み上げの機能

を「再利用」したい。

import tempfile
import time
from gtts import gTTS
from pygame import mixer

with tempfile.TemporaryFile(delete=True, dir='.', suffix='.mp3') as f:

   # 文字列をmp3ファイルに保存
   mytext = "你的就是我的,我的還是我的"
   language = "zh-TW"
   myobj = gTTS(text=mytext, lang=language, 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)

こんなコードで台湾華語の音声合成・再生ができたのですが、これ汎用的な関数にしたいと思います。

import tempfile
import time
from gtts import gTTS
from pygame import mixer

def myspeech(mylang,mytext):
   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)

myspeech("en","Good morning!")
myspeech("zh-TW","早安!")
myspeech("ja","おはよう!")

mylangに言語設定。台湾華語なら "zh-TW"、日本語なら "ja" 英語なら "en"です。
これを実行すると無事、"Good morning!"、"早安!"、"おはよう!"、と
続けてしゃべってくれました!

別のファイルにくくりだす

myspeech_lib.py という名前で以下を保存

import tempfile
import time
from gtts import gTTS
from pygame import mixer

def myspeech(mylang,mytext):
   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)

test.py と言う名前で同じフォルダに以下を保存

from myspeech_lib import myspeech

myspeech("en","Good morning!")
myspeech("zh-TW","早安!")
myspeech("ja","おはよう!")

test.pyを実行すると無事、"Good morning!"、"早安!"、"おはよう!"、と
続けてしゃべってくれました! 目標に一歩近づいた気がします。

本格的なライブラリを書いた場合は、専用のライブラリ用フォルダにまとめて格納したりするのかな? まあ、そんな大層なものは今後も作らないと思うので、同じフォルダにある別のファイルの関数を呼び出す方法が分かれば十分かなと思っています。

この記事が気に入ったらサポートをしてみませんか?