как остановить pyttsx3 в середине речи?

Я хочу остановить pyttsx3. Я попытался убить многопроцессорность, но время отклика стало медленнее, не знаю почему. Вот код:

import pyttsx3
from multiprocessing import Process

def speakfunc(audio):
    engine = pyttsx3.init()
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[0].id)
    engine.setProperty('rate', 140)
    engine.say(audio)
    engine.runAndWait()



def speak(audio):
    p = Process(target=speakfunc, args=(audio,))
    p.start()

    while p.is_alive():
         if keyboard.is_pressed('q'):
             p.terminate()
         else:
             continue
    p.join()

Есть ли вариант или альтернатива остановке речи посередине?


person Prashasth Nair    schedule 20.12.2020    source источник


Ответы (2)


Попробуйте использовать оператор try, кроме как в этом случае, когда нажата Ctrl + C, процесс завершится.

def speak(audio):
    try:
        p = Process(target=speakfunc, args=(audio,))
        p.start()
    except KeyboardInterrupt:
        p.terminate()

    p.join()
person JaniniRami    schedule 20.12.2020
comment
эй, я пробовал, но pyttsx не останавливается на полпути. Он не использует Ctrl + C в середине речи. А задержка все равно есть :( - person Prashasth Nair; 21.12.2020

try:
#abunchoflines
except('''nameoferror'''):
#anotherbunchoflines

Равно слову try (#abunchoflines), если возникает ошибка с именем error((иногда оно может быть пустым, интерпретируя «все ошибки»)), выполнить (#anotherbunchoflines). не так удобно, поскольку ctrl+c обычно равно sys. exit(0) или даже os._exit(0). Существует модуль pynput, в частности, pynput.keyboard, который делает трюк с многопоточностью (поточностью/обработкой). Подкатегории? Key и Listener.

Пример (без многопоточности/обработки)):

from pynput.keyboard import Key, Listener
def show(key):
    print('\nYou Entered {0}'.format( key))
    if key == Key.delete:#delete key pressed
    return False#stop listener
while 1:#collect events until released
    with Listener(on_press = show) as listener:
         listener.join()
person Qihua Huang    schedule 30.06.2021