コマンドラインのようにespeakにアクセスする方法があるかどうか疑問に思いました。
laptop:~$espeak
say this line first
say this line second
...
今のところ、Pythonでそれを実行できる唯一の方法はprocess = subprocess.Popen(['espeak'], stdin=subprocess.PIPE )
、の後に続く
process.communicate(expression)
また
process.stdin.write(expression)
process.stdin.close()
前者はespeakが終了するまでプログラムの残りの部分をブロックしますが、望ましい動作ではありませんが、後者はブロックしませんが、プログラムの呼び出しが2回速すぎる場合など、重複する可能性があります。コマンドラインのようにespeakを呼び出す方法があるのではないかと思っていました。この方法では、話す複数のことをすばやく入力できますが、たとえば、最初の話が完了してから2番目のことしか言いません。
特に、上記の両方の例は、単一の式の後にシャットダウンします。これを回避する方法はありますか?
編集:ed。によって与えられた答えは、最後に改行を入れて書き、それからフラッシュすることです
process = subprocess.Popen(['espeak'], stdin=subprocess.PIPE )
process.stdin.write("say this line first\n")
process.stdin.flush()
process.stdin.write("say this line second\n")
process.stdin.flush()
process.stdin.close()