微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在讲话中停止 pyttsx3?

如何解决如何在讲话中停止 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()

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

解决方法

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

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

    p.join()
,
try:
#abunchoflines
except('''nameoferror'''):
#anotherbunchoflines

等于说“try (#abunchoflines),如果有错误以error((偶尔,可以为空,解释为'所有错误'))的名字引发,执行(#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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。