Pyttsx can't convert text to apeech

167 views Asked by At

I have following piece of code. Which does the text to speech conversion using pyttsx.

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

It plays the sound saying 'None'. The response text is printed on the console but speech module speaks nothing other than 'None'. Why is so? I have tried the code as follows too:

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

But that doesn't seem to work either. Where am I making a mistake while passing argument into engine.say() string? Because when I write engine.say('I'm working.'), it speaks and reads out the phrase, while printing the response text.

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

There are 1 answers

1
NPE On

You don't show us your response() function, but it's clearly returning None.

This is what's causing the behaviour you're describing.