как прервать или отменить воспроизведение 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

Вопрос: как сделать, чтобы помощник мог одновременно/параллельно отвечать на текущий запрос и продолжать слушать микрофон на новый запрос?
И как сделать, чтоб помощник в случае воспроизведения текущего запроса, при возникновении новой команды, прерывал запрос и обрабатывал новый запрос.

Как у станции "Алиса". Говоришь "Алиса" - она слушает запрос. Далее озвучивает ответ, и если ты говоришь снова "Алиса", то она прерывается и слушает новый запрос, затем его обрабатывает.


Ответы (0 шт):