как прервать или отменить воспроизведение pyttsx3 python
На python делаю голосового помощника.
Сначала идет функция, которая в режиме ожидания слушает микрофон на вызов ИМЕНИ помощника.
def command():
r = sr.Recognizer()
with sr.Microphone() as source:
r.pause_threshold = 1
r.adjust_for_ambient_noise(source, duration=1)
print('Говорите...')
audio = r.listen(source)
try:
userRequest = r.recognize_google(audio, language="ru-RU").lower()
if userRequest in commands['alias']:
print('Помощник отозвался. переходит в ожидание команды...')
read_request()
Затем идет команда, которая читает уже запрос от пользователя. и при совпадении отправляет дальше на обработку запроса.
def read_request():
r = sr.Recognizer()
with sr.Microphone() as source:
print('Слушаю команду...')
audio = r.listen(source)
try:
userRequest = r.recognize_google(audio, language="ru-RU").lower()
userList = userRequest.split()
except:
command()
Все находится в цикле while True
Описание проблемы:
Когда я запрашиваю информацию с Википедии, то помощник находит и начинает воспроизводить.
НО, он не слышит других команд, которые я хочу ему запросить. и только когда он закончит воспроизведение, то тогда можно запросить снова.
Как сделать так, чтобы при ответе на запрос, помощник мог и слушать другие запросы, и в случае срабатывания ПРЕРЫВАЛ текущий ответ если он не закончен еще.
Пробовал делать через thread, консоль выводит ошибку из-за того что я запускаю процесс thread.start() и повторно запустить не могу, если через thread.run(), thread.join(),
то выводит ошибку :
loop already run у pyttsx3
Вопрос: как сделать, чтобы помощник мог одновременно/параллельно отвечать на текущий запрос и продолжать слушать микрофон на новый запрос?
И как сделать, чтоб помощник в случае воспроизведения текущего запроса, при возникновении новой команды, прерывал запрос и обрабатывал новый запрос.
Как у станции "Алиса". Говоришь "Алиса" - она слушает запрос. Далее озвучивает ответ, и если ты говоришь снова "Алиса", то она прерывается и слушает новый запрос, затем его обрабатывает.