# -*- coding: utf-8 -*- import requests import re import os import time from aip import AipSpeech from tkinter import * from tkinter import ttk import tkinter.messagebox #參數 類型 描述 是否必須 #tex String 合成的文本,使用UTF-8編碼, #請注意文本長度必須小於1024字節 是 #cuid String 用戶唯一標識,用來區分用戶, #填寫機器 MAC 地址或 IMEI 碼,長度為60以內 否 #spd String 語速,取值0-9,默認為5中語速 否 #pit String 音調,取值0-9,默認為5中語調 否 #vol String 音量,取值0-15,默認為5中音量 否 #per String 發音人選擇, 0為女聲,1為男聲, #3為情感合成-度逍遙,4為情感合成-度丫丫,默認為普通女 否 def wordToFileB(): print('開始轉文件') data = word_e.get('1.0','end') per = var_per.get() filepath = var_path.get() num = len(word_e.get('1.0','end')) var_ws.set('已輸入'+str(num)+'字') #print(data) #print(per) #print(filepath) if num > 500: tkinter.messagebox.showwarning('警告','請輸入不超過500字') else: wordToFile(data,per,filepath) flag = tkinter.messagebox.askokcancel('提示','轉語音成功,文件地址'+filepath+'是否播放') if flag: playFile(filepath) def playFileB(): print('開始播放') playFile(var_path.get()) def playFile(filepath): os.system(filepath) def wordToFile(data,per,filepath,spd=5,pit=5,vol=5): result = client.synthesis(data, 'zh', 1, { 'vol': vol, 'spd':spd, 'pit':pit, 'per':per }) # 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼 if not isinstance(result, dict): with open(filepath, 'wb') as f: f.write(result) tk = Tk() tk.title('文字轉語音') tk.geometry('600x400') frame = Frame(tk) Label(tk,text='請輸入文字:(最多輸入500字)',width=200,anchor=W, justify=LEFT).place(x=200,y=10) var_ws = Variable() wordsize = Label(tk,width=300,textvariable=var_ws,anchor=W, justify=LEFT) var_ws.set('已輸入0字') wordsize.place(x=365,y=10) #輸入文字 #var_word = Variable() word_e = Text(tk,height=14) word_e.place(x=20,y=40) Label(tk,text='選擇發音(0女聲,1為男聲,3為情感合成-度逍遙,4為情感合成-度丫丫)').place(x=10,y=240) var_per = Variable() e = Entry(tk, textvariable=var_per,width=20) var_per.set(3) e.place(x=400,y=240) Label(tk,text='輸入文件路徑:').place(x=10,y=270) var_path = Variable() e = Entry(tk, textvariable=var_path,width=50) var_path.set('audio.mp3') e.place(x=100,y=270) Label(tk,text='輸入語速0-9:').place(x=10,y=300) var_spd = Variable() e = Entry(tk, textvariable=var_spd) var_spd.set(5) e.place(x=100,y=300) Label(tk,text='輸入音調0-9:').place(x=180,y=300) var_pit = Variable() e = Entry(tk, textvariable=var_pit) var_pit.set(5) e.place(x=260,y=300) Label(tk,text='輸入音量0-15:').place(x=310,y=300) var_vol = Variable() e = Entry(tk, textvariable=var_vol) var_vol.set(5) e.place(x=400,y=300) Button(tk, text="轉語音", command=wordToFileB).place(x=200,y=330) Button(tk, text="播語音", command=playFileB).place(x=260,y=330) tk.mainloop()