L N
L N

Reputation: 17

How to manually take user input if user doesn't give voice input in python3

I'm using pyttsx3 and speech_recognition package for Python3 to take user's voice input. But what if the user doesn't give any voice input and after the timeout, user have to give manual input? Please help me with this thing!

import pyttsx3
import speech_recognition as sr
import pyjokes

engine = pyttsx3.init('sapi5')
voices = engine.getProperty('voices')
r = sr.Recognizer()
user_jokes = "Set a range in number..."
print(user_jokes)
engine.say(user_jokes)
engine.runAndWait()
with sr.Microphone() as source:
    user_jokes_rec = r.listen(source, timeout = 2)
user_jokes_X = r.recognize_google(user_jokes_rec, language='en-US')
if user_jokes_X is None:
    user_jokes_X = int(input("Set a range for jokes... "))
for x in range(user_jokes_X):
    user_jo = pyjokes.get_joke()
    print(user_jo)
    engine.say(user_jo)
    engine.runAndWait()

In this code, the if condition should satisfy, the value of user_jokes_X is empty or none and user manually inputs a range?

Upvotes: 0

Views: 251

Answers (2)

HorizonBloom
HorizonBloom

Reputation: 54

You could try as such: except sr.UnknownValueError as e in the exception shown below since it throws UnknownValueError due to no voice input:

try:
    with sr.Microphone() as source:
    user_jokes_rec = r.listen(source)
    user_jokes_X = r.recognize_google(user_jokes_rec, language='en-US')
except sr.UnknownValueError as e:
    user_jokes_X = int(input("Set a range for jokes... "))

`

Upvotes: 1

Andre
Andre

Reputation: 23

You can just toss the program in a try block like so:

import pyttsx3
import speech_recognition as sr
import pyjokes

engine = pyttsx3.init()
voices = engine.getProperty('voices')
r = sr.Recognizer()
user_jokes = "Set a range in number..."
print(user_jokes)
engine.say(user_jokes)
engine.runAndWait()
try:
    with sr.Microphone() as source:
        user_jokes_rec = r.listen(source, timeout = 2)
        user_jokes_X = r.recognize_google(user_jokes_rec, language='en-US')
except:
    user_jokes_X = int(input("Set a range for jokes... "))
for x in range(user_jokes_X):
    user_jo = pyjokes.get_joke()
    print(user_jo)
    engine.say(user_jo)
    engine.runAndWait()

Let me know if this solves your problem.

Upvotes: 1

Related Questions