如何暂停,恢复和阻止pyttsx3讲话?

联想360

有没有办法暂停,恢复和停止pyttsx3说话?

我尝试了很多方法,但是找不到解决方案。

这是代码:

from tkinter import *
import pyttsx3
import threading

root = Tk()

def read():
    engine.say(text.get(1.0 , END))
    engine.runAndWait()

def stop():
    # Code to stop pyttsx3 from speaking
    pass

def pause():
    # Code to pause pyttsx3
    pass

def unpause():
    # Code to unpause pyttsx3
    pass

engine = pyttsx3.init()

text = Text(width = 65 , height = 20 , font = "consolas 14")
text.pack()

text.insert(END , "This is a text widget\n"*10)

read_button = Button(root , text = "Read aloud" , command = lambda: threading.Thread(target=read, daemon=True).start())
read_button.pack(pady = 20)

pause_button = Button(root , text = "Pause" , command = lambda: threading.Thread(target=pause , daemon = True).start())
pause_button.pack()

unpause_button = Button(root , text = "Unpause" , command = unpause)
unpause_button.pack(pady = 20)

stop_button = Button(root , text = "Stop" , command = threading.Thread(target=stop, daemon = True).start())
stop_button.pack()

mainloop()

我想要的是通过单击按钮随时暂停,恢复和停止pyttsx3。

有什么办法可以在tkinter中实现这一目标吗?

如果有人可以帮助我,那就太好了。

acw1668

没有提供的暂停和继续功能pyttsx3,但是您可以通过将句子拆分成单词,然后逐个单词说出来模拟这些功能。在文字之间,您可以检查是否单击了暂停,取消暂停或停止按钮,并执行相应的操作:

from tkinter import *
import pyttsx3
import threading

root = Tk()

class Speaking(threading.Thread):
    def __init__(self, sentence, **kw):
        super().__init__(**kw)
        self.words = sentence.split()
        self.paused = False

    def run(self):
        self.running = True
        while self.words and self.running:
            if not self.paused:
                word = self.words.pop(0)
                print(word)
                engine.say(word)
                engine.runAndWait()
        print("finished")
        self.running = False

    def stop(self):
        self.running = False

    def pause(self):
        self.paused = True

    def resume(self):
        self.paused = False

speak = None

def read():
    global speak
    if speak is None or not speak.running:
        speak = Speaking(text.get(1.0, END), daemon=True)
        speak.start()

def stop():
    global speak
    if speak:
        speak.stop()
        speak = None

def pause():
    if speak:
        speak.pause()

def unpause():
    if speak:
        speak.resume()

engine = pyttsx3.init()

text = Text(width=65, height=20, font="consolas 14")
text.pack()

text.insert(END, "This is a text widget\n"*10)

read_button = Button(root, text="Read aloud", command=read)
read_button.pack(pady=20)

pause_button = Button(root, text="Pause", command=pause)
pause_button.pack()

unpause_button = Button(root, text="Unpause", command=unpause)
unpause_button.pack(pady=20)

stop_button = Button(root, text="Stop", command=stop)
stop_button.pack()

mainloop()

更新:pygame用作播放器:

from tkinter import *
import pyttsx3
import pygame

pygame.mixer.init()
engine = pyttsx3.init()

root = Tk()

def read():
    outfile = "temp.wav"
    engine.save_to_file(text.get('1.0', END), outfile)
    engine.runAndWait()
    pygame.mixer.music.load(outfile)
    pygame.mixer.music.play()

def stop():
    pygame.mixer.music.stop()

def pause():
    pygame.mixer.music.pause()

def unpause():
    pygame.mixer.music.unpause()


text = Text(width=65, height=20, font="consolas 14")
text.pack()

text.insert(END, "This is a text widget\n"*10)

read_button = Button(root, text="Read aloud", command=read)
read_button.pack(pady=20)

pause_button = Button(root, text="Pause", command=pause)
pause_button.pack()

unpause_button = Button(root, text="Unpause", command=unpause)
unpause_button.pack(pady=20)

stop_button = Button(root, text="Stop", command=stop)
stop_button.pack()

mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何在python的pyttsx3模式中更改声音

来自分类Dev

如何在python的pyttsx3模式中更改声音

来自分类Dev

作为引擎导入pyttsx3和engine = pyttsx3.init()有什么区别?

来自分类Dev

使用python和pyttsx3为自动售货机制作谈话清单。如何浏览清单?

来自分类Dev

如何暂停和恢复流程

来自分类Dev

防止pyttsx3冻结GUI

来自分类Dev

无法使用pyttsx3 Python模块

来自分类Dev

如何暂停和恢复jQuery间隔

来自分类Dev

状态恢复,如何拦截和暂停SKScene

来自分类Dev

如何暂停和恢复UIView.animateWithDuration

来自分类Dev

状态恢复,如何拦截和暂停SKScene

来自分类Dev

如何暂停和恢复旋转木马滑块

来自分类Dev

如何使用javascript暂停和恢复gif

来自分类Dev

暂停和恢复功能

来自分类Dev

暂停和恢复BackgroundWorker

来自分类Dev

暂停和恢复下载

来自分类Dev

使用线程时不会触发Pyttsx3回调

来自分类Dev

pyttsx3开始运行时,tkinter GUI冻结

来自分类Dev

如何使rxjs暂停/恢复?

来自分类Dev

如何在Android中暂停和恢复录音

来自分类Dev

SpriteKit-如何正确暂停和恢复应用

来自分类Dev

如何快速暂停和恢复NSTimer.scheduledTimerWithTimeInterval?

来自分类Dev

如何暂停和恢复动画-KDCircularProgress圆形栏

来自分类Dev

如何在JavaScript中暂停和恢复计时器?

来自分类Dev

暂停和恢复如何在Android的协程中工作

来自分类Dev

如何在JavaScript中暂停和恢复多个setTimeout?

来自分类Dev

如何像bash一样暂停和恢复进程

来自分类Dev

暂停和恢复圆形动画

来自分类Dev

SpriteKit暂停和恢复SKView