傻瓜读书软件wxpython版代码
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 29 13:53:29 2020
@author: liyan
"""
import os
import importlib,sys
importlib.reload(sys)
from docx import Document
from docx.shared import Inches
import pyttsx3
import wx
import pyaudio
import time
import threading
import wave
class Recorder():
def __init__(self, chunk=1024, channels=1, rate=64000):
self.CHUNK = chunk
self.FORMAT = pyaudio.paInt16
self.CHANNELS = channels
self.RATE = rate
self._running = True
self._frames = []
def start(self):
threading._start_new_thread(self.__recording, ())
def __recording(self):
self._running = True
self._frames = []
p = pyaudio.PyAudio()
stream = p.open(format=self.FORMAT,
channels=self.CHANNELS,
rate=self.RATE,
input=True,
frames_per_buffer=self.CHUNK)
while(self._running):
data = stream.read(self.CHUNK)
self._frames.append(data)
stream.stop_stream()
stream.close()
p.terminate()
def stop(self):
self._running = False
def save(self, filename):
p = pyaudio.PyAudio()
if not filename.endswith(".wav"):
filename = filename + ".wav"
wf = wave.open(filename, 'wb')
wf.setnchannels(self.CHANNELS)
wf.setsampwidth(p.get_sample_size(self.FORMAT))
wf.setframerate(self.RATE)
wf.writeframes(b''.join(self._frames))
wf.close()
print("Saved")
l=[]
class mainframe(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self,parent,title='读书软件',size=(480,320))
self.BeginBtn = wx.Button(self,label='打开文件',pos=(5,5),size=(80,25))
self.BeginBtn.Bind(wx.EVT_BUTTON,self.openfile)
self.inputBtn= wx.Button(self,label='清空内容',pos=(105,5),size=(80,25))
self.inputBtn.Bind(wx.EVT_BUTTON,self.cleartext)
self.readBtn= wx.Button(self,label='开始读书',pos=(205,5),size=(80,25))
self.readBtn.Bind(wx.EVT_BUTTON,self.readtext)
self.text = wx.TextCtrl(self, pos=(15,30), size =(360,200), style = wx.TE_MULTILINE)
def openfile(self,event):
global file_path,l
wildcard = 'All files(*.*)|*.*'
dialog = wx.FileDialog(None,'select',os.getcwd(),'',wildcard,wx.FD_OPEN)
if dialog.ShowModal() == wx.ID_OK:
file_path=dialog.GetPath()
if os.path.splitext(str(file_path))[1]=='.txt': ###对于TXT文件的处理
f=open(file_path,encoding='utf-8')
fread=f.read()
f=str(fread)
self.text.AppendText(f)
elif os.path.splitext(str(file_path))[1]=='.docx': ###对于WORD文件处理
f=Document(file_path)
for para in f.paragraphs:
l.append(para.text)
self.text.AppendText(str(l))
def cleartext(self,event):
self.text.Clear()
def readtext(self,event):
global l
rec = Recorder()
begin = time.time()
print("Start recording")
rec.start()
l=self.text.GetValue()
engine=pyttsx3.init()
engine.say(str(l))
engine.runAndWait()
rec.stop()
print('stop')
rec.save("1.wav")
if __name__=='__main__':
app = wx.App()
SiteFrame = mainframe(parent=None)
SiteFrame.Show()
app.MainLoop()