PySimpleGUI 综合应用|英语文本朗读以及转换为语音Mp3
•
编程语言
PySimpleGUI 综合应用
目录
PySimpleGUI 综合应用
应用界面
完整代码
所需模块
PySimpleGUI
pyttsx3
pyaudio
rapidfuzz
字典格式
应用界面

完整代码
英语朗读器.pyw
import PySimpleGUI as sg
import pyttsx3,pyaudio,pyperclip
import os,re,datetime,wave,threading
from rapidfuzz import fuzz
class AudioPlayer(threading.Thread):
def __init__(self, filename):
super().__init__()
self.filename = filename
self.st, self.pa, self.wf = None, None, None
self.stop_event = threading.Event()
def run(self):
self.wf = wave.open(self.filename, 'rb')
self.pa = pyaudio.PyAudio()
self.st = self.pa.open(format=self.pa.get_format_from_width(self.wf.getsampwidth()),
channels=self.wf.getnchannels(), rate=self.wf.getframerate(), output=True)
data = self.wf.readframes(1024)
while not self.stop_event.is_set() and len(data) > 0:
self.stop_event.wait(0.01) # 检查停止事件(非阻塞)
if not self.stop_event.is_set():
self.st.write(data)
data = self.wf.readframes(1024)
if self.st:
self.st.stop_stream()
self.st.close()
if self.pa:
self.pa.terminate()
def stop(self):
self.stop_event.set() # 设置停止标志
def loadSentence(file):
res = [],[]
try:
with open('en'+file+'.txt','r',encoding='utf-8') as f:
text = f.readlines()
for txt in text:
if txt.count('|')!=1: continue
if txt.endswith('\n'): txt=txt[:-1]
for i,t in enumerate(txt.split('|')):
res[i].append(t)
return res
except:
sg.popup_error(f'文件[{file}]不存在,程序无法运行!', font=txFont, title='Error')
return None,
def engineSay(txt):
engine.say(txt)
engine.runAndWait()
def engineFile(txt, mp3File):
try:
if os.path.exists(mp3File):
os.remove(mp3File)
widgetDisabled(['朗读列表'])
showMessage('语音文件生成中,请稍候......')
audio = engine.save_to_file(txt, mp3File)
engine.runAndWait()
showMessage('朗读中......')
widgetDisabled(['停止播放'], False)
window.Refresh()
return True
except:
sg.popup_error('生成语音文件失败,无法朗读!', font=txFont, title='Error')
return False
def stringSize(s):
return len(s)+len([c for c in s if '\u4e00'<=c= percent:
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/20468ef3a5.html
