2016-04-02 4 views
0

Je ne fais que créer un chatbot en Python. Cela fonctionne bien, mais je veux ajouter pyttsx à ce chatbot afin qu'il puisse parler de sa sortie. Mon code estpyttsx ne produit aucun son

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() 

Quand je courais ce code, je ne suis pas entendu une voix, mais je peux voir discuter sur le terminal. Je veux qu'il parle aussi la réponse. Qu'est-ce que je fais mal?

+0

Pourquoi appelez-vous 'engine.runAndWait()' deux fois? – tripleee

+0

désolé c'était une erreur d'invoquer deux fois moteur. Laisser cette partie pouvez-vous s'il vous plaît m'aider comment je peux utiliser pyttsx ici – user325923

+0

Désolé, j'ai absolument aucune connaissance du domaine ici; J'ai simplement souligné ce qui semblait être une erreur évidente. – tripleee

Répondre

0

engine.runAndWait est en dehors de la boucle while (True): il est donc peu probable qu'il soit joué tant que la boucle n'est pas interrompue.

Si vous vous déplacez dans la boucle, et et le son est saccadé, tester le code ci-dessous:

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

Mon expérience avec pyttsx est qu'il a besoin d'être nourri de courtes quantités de texte, sinon le texte est interrompu. Je ne sais pas exactement pourquoi c'est, mais tronquer les phrases et vous dire plusieurs phrases devraient convenir à votre objectif:

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?") 

Mais vous auriez besoin pour analyser le texte et tronquer d'une façon qui maintiendrait la message intact.