本篇分享的是使用python3製做一個文本讀音器,簡單點就是把指定的文本文字轉語音說出來;作這麼個小工具主要是爲了方便本身在平時看一些文章眼累的時候,可經過語音來幫助本身,固然若是你是小說迷,能夠擴展成一個小說讀音器。python
1 pip install pyttsx3
這裏我選擇了pyttsx3工具,其實百度的語音接口很不錯,不過有些麻煩,咱們姑且忽略;先安裝python的文字轉語音的工具pyttsx3,來簡單封裝一個文字轉語音的方法:工具
1 import pyttsx3 2 3 class ttsx(object): 4 def __init__(self,rate=-10): 5 self.rate = rate 6 7 def sayText(self,str): 8 self.engine = pyttsx3.init() 9 10 #語速 11 rate = self.engine.getProperty('rate') 12 self.engine.setProperty('rate', rate + self.rate) 13 14 #音量 15 #volume = self.engine.getProperty('volume') 16 #engine.setProperty('volume', volume - 0.25) 17 18 #聲音 19 #voices = self.engine.getProperty('voices') 20 #for voice in voices: 21 # self.engine.setProperty('voice', voice.id) 22 # print(voice.id) 23 24 self.engine.say(str) 25 self.engine.runAndWait()
這裏採用系統默認的語音驅動,默認的語速過快,咱們能夠經過rate來設置下,而後能夠經過調用說一句你想說的話,好比:oop
1 ttx = ttsx() 2 ttx.sayText("我是神牛003,歡迎你們關注")
正常狀況下,可以聽到有電腦系統的語音,這裏也無法演示;注意在語言播放的時候程序是阻塞的,self.engine.runAndWait()這句是關鍵;爲了方便操做我加入了ui界面,先引用tkinter插件:ui
1 import tkinter 2 from tkinter.constants import * 3 from tkinter import filedialog
這裏初始化一個操做窗體並附加幾個元素,圖像界面有點low,以下:spa
圖形窗體關鍵代碼以下,或許不是很友好:插件
1 #初始化窗體 2 def tkMain(self,title,h=500,w=300): 3 self.tk = tkinter.Tk() 4 self.tk.title(title) 5 self.tk.minsize(h,w) 6 self.tk.resizable(False,False) 7 8 tkinter.Label(self.tk, text="文本路徑:").grid(row=0, column=0) 9 10 self.entryvar = tkinter.StringVar() 11 entry = tkinter.Entry(self.tk,textvariable = self.entryvar,borderwidth=2,width=50) 12 entry.grid(row=0, column=1) 13 14 tkinter.Button(self.tk,text="選擇",command=self.selectPath).grid(row=0, column=2) 15 tkinter.Button(self.tk,text="開讀",command=self.readTxt).grid(row=0, column=3) 16 17 self.txt = tkinter.Text(self.tk) 18 self.txt.grid(row=1,columnspan=4) 19 20 self.tk.mainloop()
再者經過filedialog並增長一個按鈕事件來達到選擇電腦磁盤中的某個文件,並讀取txt內容顯示在文本框中:3d
1 #選擇文件 2 def selectPath(self): 3 self.filename = filedialog.askopenfilename() # 打開文件夾對話框 4 if not self.filename: 5 return 6 7 self.entryvar.set(self.filename) # 設置變量entryvar,等同於設置部件Entry 8 self.txt.delete(0.0,"end") 9 #加入到界面txt 10 with open(self.filename,'r') as f: 11 while True: 12 line = f.readline() 13 if(line): 14 self.txt.insert('insert',line) 15 else: 16 break
最後開讀按鈕事件只須要獲取到文本框中內容,並調用讀音方法就好了:code
1 #讀取txt中文本 2 def readTxt(self): 3 strTxt = self.txt.get(0.0,"end") 4 self.sayText(strTxt)