0

我想停止 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()

是否有任何选项或替代方法可以在中间停止讲话?

4

2 回答 2

0

尝试使用 try, except 语句,在这种情况下,当Ctrl + C按下时它将终止进程。

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

    p.join()
于 2020-12-20T08:35:42.120 回答
0
try:
#abunchoflines
except('''nameoferror'''):
#anotherbunchoflines

等于说“尝试(#abunchoflines),如果有错误的名称引发错误((偶尔可以为空白,解释'所有错误')),执行(#anotherbunchoflines)。” 不太方便,因为ctrl+c通常等于sys. exit(0),甚至os._exit(0)pynput具体来说,有一个模块pynput.keyboard可以解决多(线程/处理)的问题。子类别?KeyListener

示例(没有多(线程/处理)):

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()
于 2021-06-30T23:20:01.210 回答