音声合成(テキストから音声ファイルを作成する)ライブラリ『gtts 』を利用したプログラムを作成します。
前回はコード内にテキストを設定していた為、今回はGUIでテキストを設定できるようにしようと思います。
前回見逃した方は下記をチェックして下さい。
今回はGUIを作り、前回のコードを移植して完成させましょう。
プルダウンメニュー(コンボボックス)の作り方を覚えましょう。
Tkinterを利用してGUIを作成
GUI作成する為のライブラリ『tkinter』を利用して、GUIを作成します。『tkinter』の使い方は以前説明しているので省略します。
import tkinter as tk
root = tk.Tk()
root.title('音声合成プログラム')
canvas = tk.Canvas(root, height=150, width=400,bg="#FFFFFF")
canvas.pack()
lbl = tk.Label(text='言葉を入力して下さい', bg="#FFFFFF")
lbl.place(x=10, y=10)
Entry1= tk.Entry(width=50, bg="#EEEEEE")
Entry1.place(x=10, y=45)
cmdbtn = tk.Button(canvas,
text="確認",padx=10, pady=5,
command=command1).place(x=10, y=100)
clsbtn = tk.Button(canvas,
text="終了", padx=10, pady=5,
fg="red",
command=quit).place(x=70, y=100)
root.mainloop()
上記のプログラムを実行すると下記のGUIが表示されます。
音声を再生させる関数を「command1」という名前で定義しています。
関数を作る
前回の作成したプログラムを「command1」に移植しましょう。
language ='ja'
storepath = "C:/pythontest/"
storefile = storepath + "output.mp3"
def command1():
output = gTTS(text=Entry1.get(), lang=language, slow=False)
output.save(storefile)
playsound(storefile)
1~3行目:変数、ファイル場所、ファイル名の設定
変数、ファイル場所、ファイル名の設定をします。
5行目:関数の定義
command1()と定義した後に、前回の関数をコピーアンドペーストすればいいだけです。
プルダウンメニュー(コンボボックス)を作る
先ほどのコードでは言語は固定されていましたが、プルダウンメニューで日本語と英語を選択出来るようにします。
プルダウンメニューは正式にはComboBox(コンボボックス)と言います。
var = tk.StringVar()
var.set('ja')
choices = ['ja', 'en']
option = tk.OptionMenu(canvas, var, *choices)
option.pack(padx=10, pady=10)
option.place(x=10, y=70)
2行目:言語の初期値
選択する時の初期値を「ja(日本語)」にします。
4行目:言語の選択リスト
選択する項目リストで、「ja(日本語)」以外に「en(英語)」を追加します。
6行目:言語のコンボボックスの作成
「tk.OptionMenu」はコンボボックスを作る関数になります。
2番目の引数「var」には「ja」が設定されているので、コンボボックスの表示には「ja」が表示されます。
choicesの前に『*』を付ける事を忘れないで下さい。
7行目:コンボボックスの大きさを定義
上記のプログラムを実行させると下記のウインドウが表示されます。
また、コンボボックスで選んだ値は「get()」で取得します。
language = var.get()
プログラムコード
すべてのコードを合体させたのが気になります。
文章を入力して音声合成出来るかを試してみて下さい。
from gtts import gTTS
from playsound import playsound
import tkinter as tk
root = tk.Tk()
root.title('音声合成プログラム')
canvas = tk.Canvas(root, height=150, width=400,bg="#FFFFFF")
canvas.pack()
lbl = tk.Label(text='言葉を入力して下さい', bg="#FFFFFF")
lbl.place(x=10, y=10)
Entry1= tk.Entry(width=50, bg="#EEEEEE")
Entry1.place(x=10, y=45)
var = tk.StringVar()
var.set('ja')
choices = ['ja', 'en']
option = tk.OptionMenu(canvas, var, *choices)
option.pack(padx=10, pady=10)
option.place(x=10, y=70)
storepath = "C:/pythontest/"
storefile = storepath + "output.mp3"
def command1():
language = var.get()
output = gTTS(text=Entry1.get(), lang=language, slow=False)
output.save(storefile)
playsound(storefile)
cmdbtn = tk.Button(canvas,
text="再生",padx=10, pady=5,
command=command1).place(x=10, y=110)
clsbtn = tk.Button(canvas,
text="終了", padx=10, pady=5,
fg="red",
command=quit).place(x=70, y=110)
root.mainloop()
最後に
いかがだったでしょうか。
GUIベースのプログラムを作ることにも慣れてきたのではないでしょうか。
サイズや位置などを色々と変更して、自分なりのプログラムにカスタマイズしていってください。そうすれば、プログラミングスキルも上がっていくと思います。
「役に立った!」と思れましたら、下のSNSボタンで記事のシェアをしていただけると嬉しいです!
コメント