2017-09-09 2 views
0

Ich habe folgendes Stück Code. Was macht die Text-zu-Sprache-Konvertierung mit pyttsx?Pyttsx kann Text nicht in Apeech konvertieren

sys.stdout.write("> ") 
#sys.stdout.flush() 
classify(sentence = sys.stdin.readline()) 
while True: 
    sentence = sys.stdin.readline()  #input sentence 
    text = response(sentence)  #response to the input sentence. 
    engine = pyttsx3.init() 
    rate = engine.getProperty('rate') 
    engine.setProperty('rate', rate - 5) 
    engine.say(text)  #converts the text to speech 
    engine.runAndWait() 

Es spielt den Ton mit der Aufschrift 'None'. Der Antworttext wird auf der Konsole gedruckt, aber das Sprachmodul spricht nichts anderes als "Keine". Warum ist das so? Ich habe den Code auch wie folgt ausprobiert:

sys.stdout.write("> ") 
    #sys.stdout.flush() 
    classify(sentence = sys.stdin.readline()) 
    while True: 
     sentence = sys.stdin.readline()  #input sentence 
     response(sentence)  #response to the input sentence. 
     engine = pyttsx3.init() 
     rate = engine.getProperty('rate') 
     engine.setProperty('rate', rate - 5) 
     engine.say(response(sentence))  #converts the text to speech 
     engine.runAndWait() 

Aber das scheint auch nicht zu funktionieren. Wo mache ich einen Fehler bei der Übergabe von Argument in engine.say() Zeichenfolge? Weil, wenn ich engine.say('I'm working.') schreibe, es spricht und liest die Phrase vor, während der Antworttext gedruckt wird.

def response(sentence, userID='123', show_details=False): 
    # if we have a classification then find the matching intent tag 
    if results: 
     # loop as long as there are matches to process 
     while results: 

      for i in intents['intents']: 

       # find a tag matching the first result 
       if i['tag'] == results[0][0]: 
        # set context for this intent if necessary 
        if 'context_set' in i: 
         if show_details: print ('context:', i['context_set']) 
         context[userID] = i['context_set'] 

        # check if this intent is contextual and applies to this user's conversation 
        if not 'context_filter' in i or \ 
         (userID in context and 'context_filter' in i and i['context_filter'] == context[userID]): 
         if show_details: print ('tag:', i['tag']) 
         # a random response from the intent 
         return print(random.choice(i['responses'])) 

      results.pop(0) 

Antwort

0

Sie zeigen uns nicht Ihre response() Funktion, aber es ist None deutlich zurück.

Dies ist, was das Verhalten verursacht, das Sie beschreiben.

+0

Danke für Ihre Antwort Ich habe jetzt die Funktion hinzugefügt. Ich habe versucht, Return "" + Antwort (Satz) hinzuzufügen. Es hat nicht funktioniert. Ich habe es falsch gemacht, nehme ich an. Kannst du mir helfen, herauszufinden, was es zurückgeben sollte und was ich in den engine.say() schreiben sollte, also spricht es für mich? –

+0

Danke. Ich habe es gelöst. –