python Tkinterで入力した文章を喋ってもらう方法

前置き

最近音声合成アプリをボイスロイド(AITalk社の文字入力ソフト)に今更ながらハマってしまいその中のキャラクターのように滑らかな喋りをMacで作ってみたいという思いから、作ろうと思ったのですが、まずは、入力したものを喋ってもらうことを優先に考え、gTTSを使って入力したものを保存して喋ってもらいました。今回は文字入力から音声出力ができるまでをまとめてみました。

声質等を完全オリジナルにするには深層学習などのAIに関する勉強をする必要なこととモデルになってくれるコネやマネーがないのでまだまだ先になりそうですが・・・

コードの紹介

説明なんていらないからソースコードだけがみたい人もいると思いますから(自分もそういう時あるし・・)先にソースコードを載せます。その後部分ごとに解説していければと思います。コピぺして実行すればうまくいくはずです。各機能のインストールが順調であればの話ですが・・・

from gtts import *
import tkinter as tk
from tkinter import *
import tkinter.filedialog
import wave
class Frame(tkinter.Frame):
    def __init__(self,master):
        super().__init__(master)
        
        master.geometry("600x600")
        master.title("棒読み読み上げテスト")
        master.minsize(width=600,height=600)
        self.voice = []
        self.label = tkinter.Label(master,text="棒読み読み上げテスト",font=("",20))
        self.label1 = tkinter.Label(master,text="入力欄",font=("",20))
        self.input = tkinter.Text(master, font=("",20))
        self.button = tkinter.Button(master,text="音声を保存する", command=self.click) #
        self.button1 = tkinter.Button(master,text="▶︎", )
        self.button2 = tkinter.Button(master,text="■")

         
        
        self.input.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E,))
        self.button.grid(column=3, row=0, sticky=(tk.N,))
        self.button1.grid(column=1, row=0, sticky=(tk.N,))
        self.button2.grid(column=2, row=0, sticky=(tk.N,))

    def click(self):
        self.voice = self.input.get('1.0','end -1c') 
        voice =  gTTS(self.voice,lang='ja')
        voice.save(self.voice+".wav")
        print(self.voice)


class App():
    def main():
        page = tkinter.Tk()
        app = Frame(page)
        app.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
        page.columnconfigure(0, weight=1)
        page.rowconfigure(0, weight=1)
        #メニューバーの作成
        menubar = tk.Menu(page)
        page.config(menu=menubar)

# menubarを親としメニューバーの作成と設定を表示、機能の設定
        setting_menu = tk.Menu(menubar,tearoff = 0)
        menubar.add_cascade(label='設定', menu=setting_menu)


#appの起動コード
        page.mainloop()
    if __name__ == "__main__":
        main()


こんな感じに入力してプログラムを実行すると下の画像のようになります。

注スタートとストップのボタンは飾りです。

こんな意味不明(意味なんてない)な文でも保存するボタンを押すと書かれたプログラムファイルがあるフォルダーに音声ファイルが作成されます。

.wavはセキュリティーの関係上投稿できませんがしっかりとマグロになりたいと言っていました。

喋ってもらう部分の記録

 gTTSのマニュアルを元に、gTTSだけを使うには以下の通りになります。

from gtts import *
import wave
voice =  gTTS("言わせたい言葉",lang='ja')#langで言語を選択
        voice.save("voice.wav")
        print(voice)

できているか確認のためprint で入力されたものができたかの確認を行いました

tkinterのフレーム等の説明は別の記事に掲げるとして、ここでは打ち込んだテキストを取得して音声データを作成することを紹介します。

class Frame(tkinter.Frame):
    def __init__(self,master):
        super().__init__(master)
     self.input = tkinter.Text(master, font=("",20))
     self.button = tkinter.Button(master,text="音声を保存する", command=self.click)

    def click(self):
        self.voice = self.input.get('1.0','end -1c') 
        voice =  gTTS(self.voice,lang='ja')
        voice.save(self.voice+".wav")
        print(self.voice)

 python tkinterの公式サイトを確認したところtkinterを使ってボタンを処理を行うにはボタンのラベルに名前をつけた後、command=”引数”で引数先の処理を行うようです。 Textから入力したデータを取得するには、get()メゾットを使います。()内にどこからどこまでを指定する必要があります。この場合だと1行目から最後までを指定する場合(’1.0′,’end -1c’)と設定します。「1c=1char =1文字」しないと行を指定してくれとエラーを吐きます。

今後の展開

以上がgTTSを使って入力したものを保存して喋ってもらう方法でした。入力して保存することはできましたが、保存フォルダの指定や名前をつけて保存はしたいので、保存機能の実装を行っていきたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA