前提・実現したいこと
pyttsx3を使用し、入力したらスレッド内でテキストの読み上げをする処理。
特定の入力があるまで処理は終了しない。
連続で入力してもエラーが発生せず音声が出力されるようにしたいです。
発生している問題・エラーメッセージ
2回目の入力からエラーが発生ししてしまいます。
Exception in thread Thread-8: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/threading.py", line 950, in _bootstrap_inner self.run() File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/threading.py", line 888, in run self._target(*self._args, **self._kwargs) File "/var/folders/vh/0d7m851573sg8gy7l7r6b0q00000gn/T/ipykernel_1708/1108261149.py", line 21, in th File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pyttsx3/engine.py", line 177, in runAndWait raise RuntimeError('run loop already started') RuntimeError: run loop already started
該当のソースコード
import pyttsx3 import threading import queue engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty("voice", voices[18].id) a = ["さようなら"] def th(): while True: text = q.get() q.task_done() if text is None: continue else: c = ("こんにちは") print(c) engine.say(c) engine.runAndWait() if __name__ == '__main__': q = queue.Queue() text = None q.put(text) t1 = threading.Thread(target=th, daemon=True) t1.start() while True: text = None text = input() if text is None: print("入力なし") elif text in a: print("終了") break else: q.put(text) q.join()
試したこと
上記コードの一部を下記のコードに変更し試しました。
エラーは発生しませんでしたが音声が出力されませんでした。
c = ("こんにちは") print(c) engine.say(c) engine.startLoop(False) engine.endLoop()
補足情報(FW/ツールのバージョンなど)
Mac
Python 3.9.0
よろしくお願いします。
あなたの回答
tips
プレビュー