@Zloba1337

Pyttsx3, speak_engine. Как продолжить выполнение?

Всем привет. Мне нужно написать голосового помощника, как у Хауди Хо, но я добавил в него новые функции и столкнулся с проблемой. После создания переменной с pyttsx.init(), создаётся функция speak(), которая преобразует текст в речь, выглядит она так:
def speak(what):
    print(what)
    speak_engine.say(what)
    speak_engine.runAndWait()
    speak_engine.stop()

what - это то, что должен преобразовать голосовой помощник.
Соответственно, если использовать эту функцию в открытом коде, то никаких проблем нет, текст произносится и код работает дальше, но если я хочу, например, узнать время, либо конвертировать валюту, то фоновое прослушивание идёт лишь один раз. Соответственно после ответа ассистента на мой запрос, после функции speak() вообще ничего не выполняется, даже если поставить любой print(). Я уже пробовал делать return у функций, у всех, всё тщетно. Я не могу понять, почему так происходит, в открытом коде никаких проблем нет, но в других функциях, почему-то, после функции speak() ничего не выполняется, и голосовой ассистент слушает лишь один раз, а дальше просто, так сказать, игнорирование.
Также есть функция callback:
def callback(recognizer, audio):
    try:
        global voice
        voice = recognizer.recognize_google(audio, language="ru-RU").lower()

        print("[log] Распознано: " + voice)

        if voice.startswith(opts["alias"]):
            cmd = voice

            for x in opts['alias']:
                cmd = cmd.replace(x, "").strip()

            for x in opts['tbr']:
                cmd = cmd.replace(x, "").strip()

            # распознаем и выполняем команду
            cmd = recognize_cmd(cmd)
            execute_cmd(cmd['cmd'])

Она распознаёт голос, а далее ищет обращение в сообщении и подбирает команду по совместимости из словаря с командами, но при этом после execute_cmd() также ничего не выполняется, а эта функция отвечает за команды, которые выполняет ассистент, то есть переходит перенаправление на эту функцию (execute_cmd), а там уже прописаны все вариации команд через if, elif, и тут то же самое, если в if/elif есть speak(), то ничего не выполняется.
Я всё перепробовал, пересмотрел, но ничего не помогает. Можете ли помочь с этим?
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Zloba1337 Автор вопроса
Сергей Тихонов, у меня не 20 строк в коде, намного больше, я просто передал суть проблемы отрывками. Мне нужно решить проблему, которую я описал, а print(), input() не поможет. Мне нужно именно голосовой ассистент, чтобы он произносил. Да, если убрать runAndWait и stop, то всё будет прекрасно, но мне-то нужно именно произношение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы