主要是就之前的那个有声阅读工具进行改进,如果一不小心读错了,就要给关了重新打开,不然就要等那破玩意读完。

原本懒得继续折腾了,但是用了几天实在给我恶心的不行。不得已下午我又重新写了一遍,简单的添加了一些功能。

期间遇到了一些不是很影响使用的问题,但由于懒癌晚期,感觉好像不影响大体使用,再加上解决起来还要继续捣鼓py,就懒得改了。

或许以后实在恶心到我了,会继续给那个功能实现。也没准等我以后有了钱了,就继续用百度语音或者讯飞的api,毕竟微软自带的语音实现起来实在太拉胯了。

下面贴出代码。

import pyttsx3
import pyperclip
import multiprocessing
import time
import os
from pynput import keyboard


def on_press(key):
    if key == keyboard.Key.alt_l:
        os.system('"taskkill /F /IM speakerMu"')


def keyboard_listen():
    with keyboard.Listener(on_press=on_press) as lsn:
        lsn.join()


def mu_speaker():

    speak = pyttsx3.init()  # 初始化语音引擎
    speak.setProperty("rate", 250)
    speak.setProperty("volume", 2.5)
    # 这里语速是250,音量是1,可以自己调

    speakString = pyperclip.paste()
    speakString = speakString.replace("\r\n", "")
    speakString = speakString.replace("\n", "")
    speakString = speakString.replace(" ", "")
    # 上面去除一些换行回车空格什么的,因为在有的地方(如pdf)会造成奇怪的停顿。
    # 但有时候空格去除后反倒会出现一些问题,遇到的话可以把去除空格注释掉。

    speak.say(speakString)
    speak.runAndWait()


if __name__ == "__main__":

    pasteString = pyperclip.paste()

    keyboardCreate = multiprocessing.Process(target=keyboard_listen)
    keyboardCreate.start()
    # 创建一个键盘监听的进程,如果用户输入特定按键,朗读就会终止。
    # !!!!!但目前没有成功!!!!!!
    # 我试着把进程对象设置成全局变量给他终止,或者传过去pid,或者目前这个方法都不行。

    while True:
        time.sleep(0.1)
        if pasteString != pyperclip.paste():

            pasteString = pyperclip.paste()

            if 'speaker_process' in dir():
                # 如果这个变量名存在,也就是这个进程创建过,就给他ban了,用以终止后读新文本。
                speaker_process.terminate()
                speaker_process.join()

            speaker_process = multiprocessing.Process(target=mu_speaker,name="speakerMu")
            speaker_process.start()
            # 创建一个朗读的进程,如果有新的文本需要读的话,就给他终止,重新创建,用于实现终止再读。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐