Сделать так, чтобы код работал без остановки

Хотел сделать код на sr pyttsx, используя библиотеку гугла, и пока успехи нормальные. Но хотелось бы, чтобы прослушивание после функции talk не останавливалась. Что я пробовал: Ставить while True:

Подробно: Когда я начинаю использовать данную программу, то даю команду, ну допустим, " вк " - он открывает вк. Если бы просто было open.web...(vk.com, new=2), то он открыл и продолжил работу, но вот если в выполнении используется функция speak, то в этом случае код останавливает работу.

opts = {
    "alias": ('ангелина', 'ангелин', 'анька', 'ангелюсик', 'анг', 'angelina'),
    "cmds": {
        "ctime": ('время', 'сколько время', 'часы', 'какой сейчас час'),
        "relax": ('я устал', 'боже я так устал', 'включи музыку', 'хочу отдохнуть', 
                    'вруби музыку', 'я хочу устать', 'хочу отдохнуть','я реально задолбался') , 
        "food": ('хочу приготовить курочку', 'хотел бы приготовить', 'может приготовить?' ) ,
        "vk": ('вк', 'включи вк', 'включить вк', 'зайди в вк', 'вконтакте'),
        "league": ('лига легенд', 'лол', 'лоляха', 'лолиха', 'лал', 'лул', 'включи лол', 'зайди в лол', 'включи лигу легенд'),       
        "search": ('найди', 'поиск', 'запусти поиск'),                                     
    }
}


def speak(what):
    print("[Keylin]" + what)
    speak_engine.say( what )
    speak_engine.runAndWait()


def callback(recognizer, audio):
    try:
        voice = r.recognize_google(audio, language='ru-RU').lower()
        print('Услышала: ' + voice)
        if voice.startswith(opts["alias"]):
            cmd = voice
            for x in opts["alias"]:
                cmd = cmd.replace(x, "").strip()
                cmd = recognize_cmd(cmd)
                execute_cmd(cmd['cmd'])
    except sr.UnknownValueError:
        print("Неизвестная комманда")


def recognize_cmd(cmd):
    RC = {'cmd': '', 'percent': 0}
    for c,v in opts['cmds'].items():
        for x in v:
            vrt = fuzz.ratio(cmd, x)
            if vrt > RC['percent']:
                RC['cmd'] = c 
                RC['percent'] = vrt
        
    return RC


def execute_cmd(cmd):
    if cmd == 'ctime':

        now = datetime.datetime.now()

        speak ("Сейчас " + str(now.hour) + ":" + str(now.minute))

    elif cmd == 'relax':
        webbrowser.open('https://www.youtube.com/watch?v=5qap5aO4i9A', new=2)

        speak ("Намёк понят, Никита")
    elif cmd == 'food':
        speak ("Эх, может быть, я когда нибудь попробую человеческую еду. А так незнаю.")
    elif cmd == 'vk':
        webbrowser.open('http://vk.com', new=2)
        speak("Открываю, сэр.")
    elif cmd == 'league':
        os.startfile(r'C:/Riot Games/League of Legends/LeagueClient.exe')
        speak('Запускаю.')
    elif cmd == 'search':
        speak("Введите текст, сэр")
        text = input(str("Введите текст для перевода: "))
        webbrowser.open('https://translate.google.com/?hl=ru#view=home&op=translate&sl=en&tl=ru&text=' + text, new=2)
    else:
        print ("Не раслышала")
                

r = sr.Recognizer()
m = sr.Microphone(device_index=2)

with m as source:
    r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()

speak("Приветствую хозяин, как прошёл день?")

stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1)

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