Python日記vol.22🐍ただダジャレを読み上げるだけのアプリ
こんにちは。aliceです。
急に涼しくなったので久しぶりにお番茶を入れました。長時間置いておくとまろやかになるのですが、その前に飲み切ってしまうのが残念です。
今回は、ただダジャレを読み上げるだけのアプリの話です。
せっかく働くなら明るい職場で働きたい、明るい職場を作ろう✨ということで、ダジャレを読み上げるアプリを作りました。
いろいろ書き換えたのでちょっと違うけど、イメージはこちらです。
指定した回数だけ、ランダムにダジャレを読み上げます。
読み上げる間隔も自分で指定します。
いきなりどこからか「布団がふっとんだ」とか聞こえてきたら楽しそうですね。
明る職場計画😀
一歩間違えたら極寒の地になりそうなので、タイミングは大事ですね。
まだ、使っていないので使ってみたら感想でも書きたいと思います。
作ってみる
では、さっそく作ります。
まずは、次のライブラリをpip installします。
pyttsx3は音声の読み上げに使います。
pip install PySimpleGUI
pip install pyttsx3
コードはこちらです。
import random
import time
import PySimpleGUI as sg
import pyttsx3
# ダジャレのリスト
dajare_list = [
'布団が吹っ飛んだ',
'猫が寝込んだ',
'アルミ缶の上にあるミカン',
'土管の中でドッカーン',
'チョコをちょこっと',
]
def create_gui():
"""
GUIを作成する
:return: window ウィンドウ
"""
sg.theme('LightGray2')
# レイアウトの定義
layout = [
[sg.Text('回数 ', size=(12, 1)),
sg.Slider(range=(1, 10), orientation='h', size=(30, 20), key='count_slider', default_value=1)],
[sg.Text('待機時間(秒): ', size=(12, 1)),
sg.Slider(range=(1, 10), orientation='h', size=(30, 20), key='slider', default_value=5)],
[sg.Text('実行状況 ', size=(12, 1)), sg.ProgressBar(100, orientation='h', size=(20, 20), key='progressbar'),
sg.Text('', size=(12, 1), key='progress_text')],
[sg.Button('実行'), sg.Button('終了')],
[sg.Text('_' * 70)],
[
sg.Text('', size=(15, 1)),
sg.Text('', size=(30, 1), key='output'),
sg.Column([
[sg.Text('', size=(30, 1), key='output')],
# 画像を入れるときは同じディレクトリにimage.pngを置いて、下の行のコメントアウトを解除してください
# [sg.Image(filename='image.png', key='image')],
], justification='right')
],
]
# ウィンドウの生成
return sg.Window('ダジャレ読み上げアプリ', layout)
def read_aloud_thread(window, count, sleep_duration):
"""
ダジャレを読み上げる
:param window: ウィンドウ
:param count: 読み上げる回数
:param sleep_duration: 待機時間
:return:
"""
progress_bar = window['progressbar']
progress_text = window['progress_text']
engine = pyttsx3.init()
engine.setProperty('rate', 130)
for i in range(count):
dajare = random.choice(dajare_list) # ランダムにダジャレを選択
window['output'].update(dajare) # テキストを表示
engine.say(dajare) # テキストを音声に変換
engine.runAndWait() # 音声を再生
# 次のダジャレまで待機
time.sleep(sleep_duration)
# プログレスバーを更新
progress_value = int(((i + 1) / int(count)) * 100)
progress_bar.update(progress_value)
progress_text.update(f'{progress_value}% 完了')
def main():
window = create_gui()
while True:
event, values = window.read()
if event == '実行':
count = int(values['count_slider'])
sleep_duration = int(values['slider'])
window.start_thread(lambda: read_aloud_thread(window, count, sleep_duration), end_key='-THREAD_END-')
elif event in ('終了', sg.WIN_CLOSED):
break
window.close()
if __name__ == '__main__':
main()
このコードを実行するとこんな画面が立ち上がります。
画像を追加するときは、同じディレクトリ上に「image.png」ファイルを置きます。
次に、reate_gui関数内にあるlayoutの次の部分のコメントアウトを解除してください。
# [sg.Image(filename='image.png', key='image')],
すると、右下に画像が入ります。
ダジャレはこちらからいただきました。
子供が喜ぶ親父ギャグ30選だそうです。
これをChatGPTにリストにしてもらいました。
上のコードのダジャレは5個なので、もうちょっと増やしたい!という場合は、お好みで追加してください。
dajare_list = [
'布団が吹っ飛んだ',
'猫が寝込んだ',
'アルミ缶の上にあるミカン',
'トイレに行っといれ',
'土管の中でドッカーン',
'チョコをちょこっと',
'お金はおっかねぇ',
'ダジャレを言うのは誰じゃ?',
'画鋲が刺さって、ガビョーン',
'牛がわらって、うっしっし',
'イカはいかが?',
'いくらは幾ら?',
'カレーはかれぇ!',
'イルカはいるか?',
'内容がないよう',
'ぶどうを一粒どう?',
'鶴がツルっとすべった',
'箱を運んだ',
'電話に出んわ',
'ワニが輪になる',
'アタリメはあたりめえだ',
'お金を取られた おっかねー',
'車が来るまで車で待つわ',
'タンスに乗ったんす',
'チーターが池におっこちーたー',
'トキが時を変えた',
'ワシが「わしじゃー!」と言った',
'神社で飲むジンジャエール',
'太陽がすごくて目が痛いよう',
'虫がいても無視しよう'
]
いろいろ試行錯誤
音声読み上げ
最初はgTTSでテキストを音声に変換・mp3形式で保存してから、playsoundを使って読み上げていました。
X(Twitter)の動画はplaysoundで読み上げたものです。
音声的にはこちらの方が好みなのですが、読み上げるだけならpyttsx3の方が簡単かな?と思ってこちらにしてみました。
マルチスレッド
マルチスレッドも最初はimport threadingで作っていたのですが、PySimpleGUIのstart_threadメソッドでもできるとわかったのでこちらに変更しました。
ChatGPTにはthreadingの方が良いよと言われたのですが、使い方が微妙なのかこちらを使うとエラーになるので、まずはstart_threadメソッドにしてみました。
せっかくなので、ごちゃごちゃの思い出を貼っておきます。
よかったら、一緒に使ってみませんか?
もちろん、結果はどうなるかわかりません!
参考
この記事が気に入ったらサポートをしてみませんか?