2016-04-02 20 views
0

私はちょうどPythonでチャットボットを作成しています。それはうまくいっていますが、このチャットボットにpyttsxを追加して、その出力を伝えることができます。私はどんな声を聞いていないですが、私は、端末上でチャット見ることができますこのコードを実行している場合は 私のコードはpyttsxは音が出ません

import aiml 
import sys 
import pyttsx 

engine = pyttsx.init() 

# Create a Kernel object. 
kern = aiml.Kernel() 

brainLoaded = False 
forceReload = False 
while not brainLoaded: 
    if forceReload or (len(sys.argv) >= 2 and sys.argv[1] == "reload"): 
     kern.bootstrap(learnFiles="std-startup.xml", commands="load aiml b") 
     brainLoaded = True 
     kern.saveBrain("standard.brn") 
    else: 
     try: 

      kern.bootstrap(brainFile = "standard.brn") 
      brainLoaded = True 
     except: 
      forceReload = True 


print "\nINTERACTIVE MODE (ctrl-c to exit)" 
while(True): 

    hea = kern.respond(raw_input("> ")) 

    print hea 
    engine.say (hea) 

engine.runAndWait() 

です。私はそれも応答を話したい。私は間違って何をしていますか?

+0

なぜ 'engine.runAndWait()'を2回呼び出すのですか? – tripleee

+0

申し訳ありませんが、2回エンジンを呼び出すのは間違いでした。その部分を残しておけば、私はここでpyttsxをどのように使うことができますか? – user325923

+0

申し訳ありませんが、ここではドメイン知識は全くありません。私は明らかなミスのようなものを指摘しました。 – tripleee

答えて

0

engine.runAndWaitはwhile(True):ループの外側にあるため、ループが中断されるまで再生される可能性は低いです。

あなたがループに移動し、音が途切れている場合、下記のコードをテスト:

import pyttsx 
engine = pyttsx.init() 
engine.say("Oh, hello!") 

pyttsxとの私の経験では、それがテキストの短い量を供給する必要があることそれ以外のテキストです中断されます。私は正確に理由があるわからないんだけど、文章を自分で切り捨てし、いくつかのフレーズがあなたの目的に合わせなければならないと言って:

engine.say("It's nice to meet you.") 
engine.say("I hope you are doing well.") 
engine.say("Would you like to join us ") 
engine.say ("tomorrow at eight for dinner?") 

しかし、あなたは続けるだろうな方法でテキストを解析し、それを切り捨てる必要があると思いますメッセージはそのままです。

関連する問題