Python 编译Edge-TTS(edge_tts)转MP3工具

Python 编译Edge-TTS

利用PIP Edge-tts库来实现Azure 神经网络自然语音转MP3, 这应该是微软给老百姓们一个共享前沿科技大餐。(edge_tts)

找了网上的很多源代,现在利用现有公开的代码混编译一个个人的学习工具。代码仅供学习研究。

 
from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
from tkinter import scrolledtext
import os
import edge_tts
import asyncio
import win32clipboard as w
import win32con

def gettext1():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-GB-LibbyNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))



def gettext2():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-GB-MaisieNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext3():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-GB-en-GB-RyanNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext4():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-GB-SoniaNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))



def gettext5():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-GB-ThomasNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext6():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-GB-MaisieNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext7():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-HK-SamNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext8():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-HK-YanNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext9():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-AnaNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext10():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-AriaNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext11():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-ChristopherNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext12():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-EricNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext13():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-GuyNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext14():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-JennyNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext15():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-MichelleNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext16():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-RogerNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext17():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "en-US-SteffanNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext18():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-CN-YunyangNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext19():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-TW-YunJheNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext20():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-TW-HsiaoChenNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext21():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-TW-HsiaoYuNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))

def gettext22():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-CN-XiaoxiaoNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext23():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-CN-XiaoyiNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))


def gettext24():
    
    gt= textPad.get(1.0, END)
    TEXT=gt
    VOICE = "zh-CN-YunjianNeural"
    
    if __name__ == "__main__":  
                asyncio.run(_main(VOICE))










OUTPUT_FILE = "test.mp3"  
WEBVTT_FILE = "test.vtt"

async def _main(VOICE) -> None:
     
    communicate = edge_tts.Communicate(textPad.get(1.0, END), VOICE)  
    submaker = edge_tts.SubMaker()  
    with open(OUTPUT_FILE, "wb") as file:  
        async for chunk in communicate.stream():  
            if chunk["type"] == "audio":  
                file.write(chunk["data"])  
            elif chunk["type"] == "WordBoundary":  
                submaker.create_sub((chunk["offset"], chunk["duration"]), chunk["text"])  
  
    with open(WEBVTT_FILE, "w", encoding="utf-8") as file:  
        file.write(submaker.generate_subs())  
  
  


    
def new_file(*args):
    global top, filename, textPad
    top.title("未命名文件")
    filename = None
    textPad.delete(1.0, END)
 
 
def open_file(*args):
    global filename
    filename = askopenfilename(defaultextension=".txt")
    if filename == "":
        filename = None
    else:
        top.title(""+os.path.basename(filename))
        textPad.delete(1.0, END)
        f = open(filename, 'r', encoding="utf-8")
        textPad.insert(1.0, f.read())
        f.close()
 
 
def click_open(event):
    global filename
    top.title("" + os.path.basename(filename))
    textPad.delete(1.0, END)
    f = open(filename, 'r', encoding="utf-8")
    textPad.insert(1.0, f.read())
    f.close()
 
 
def save(*args):
    global filename
    try:
        f=open(filename, 'w', encoding="utf-8")
        msg=textPad.get(1.0, 'end')
        f.write(msg)
        f.close()
    except:
        save_as()
 
 
def save_as(*args):
    global filename
    f = asksaveasfilename(initialfile="未命名.txt", defaultextension=".txt")
    filename = f
    fh = open(f, 'w', encoding="utf-8")
    msg = textPad.get(1.0, END)
    fh.write(msg)
    fh.close()
    top.title(""+os.path.basename(f))
 
 
def rename(newname):
    global filename
    name = os.path.basename(os.path.splitext(filename)[0])
    oldpath = filename
    newpath = os.path.dirname(oldpath)+'/'+newname+'.txt'
    os.rename(oldpath, newpath)
    filename = newpath
    refresh()
        
        
def rename_file(*args):
    global filename
    t = Toplevel()
    t.geometry("300x80+200+250")
    t.title('重命名')
    frame = Frame(t)
    frame.pack(fill=X)
    lable = Label(frame, text="文件名")
    lable.pack(side=LEFT, padx=5)
    var = StringVar()
    e1 = Entry(frame, textvariable=var)
    e1.pack(expand=YES, fill=X, side=RIGHT)
    botton = Button(t, text="确定", command=lambda: rename(var.get()))
    botton.pack(side=BOTTOM, pady=10)
 
 
def delete(*args):
    global filename, top
    choice = askokcancel('提示', '要执行此操作吗')
    if choice:
        if os.path.exists(filename):
            os.remove(filename)
            textPad.delete(1.0, END)
            top.title("记事本")
            filename = ''
 
 
def cut():
    global textPad
    textPad.event_generate("<<Cut>>")
 
 
def copy():
    global textPad
    textPad.event_generate("<<Copy>>")
   
def paste():
    global textPad
    textPad.event_generate("<<Paste>>")
 

def undo():
    global textPad
    textPad.event_generate("<<Undo>>")
 
 
def redo():
    global textPad
    textPad.event_generate("<<Redo>>")
 
 
def select_all():
    global textPad
    textPad.tag_add("sel", "1.0", "end")
 
  
 
 
 
def mypopup(event):
    global editmenu
    editmenu.tk_popup(event.x_root, event.y_root)
 
 
 
 
def refresh():
    global top, filename
    if filename:
        top.title(os.path.basename(filename))
    else:
        top.title("浩读系列-edge-tts")
 
 
top = Tk()
top.title("浩读系列-edge-tts")
top.geometry("640x480")
 
menubar = Menu(top)

filemenu = Menu(top)
filemenu.add_command(label="新建", accelerator="Ctrl+N", command=new_file)
filemenu.add_command(label="打开", accelerator="Ctrl+O", command=open_file)
filemenu.add_command(label="保存", accelerator="Ctrl+S", command=save)
filemenu.add_command(label="另存为", accelerator="Ctrl+shift+s", command=save_as)
filemenu.add_command(label="重命名", accelerator="Ctrl+R", command=rename_file)
filemenu.add_command(label="删除", accelerator="Ctrl+D", command=delete)
menubar.add_cascade(label="文件", menu=filemenu)

editmenu = Menu(top)
editmenu.add_command(label="撤销", accelerator="Ctrl+Z", command=undo)
editmenu.add_command(label="重做", accelerator="Ctrl+Y", command=redo)
editmenu.add_separator()
editmenu.add_command(label="剪切", accelerator="Ctrl+X", command=cut)
editmenu.add_command(label="复制", accelerator="Ctrl+C", command=copy)
editmenu.add_command(label="粘贴", accelerator="Ctrl+V", command=paste)
editmenu.add_separator()
editmenu.add_command(label="全选", accelerator="Ctrl+A", command=select_all)





menubar.add_cascade(label="编辑", menu=editmenu)
 

aboutmenu = Menu(top)
aboutmenu.add_command(label="en-GB-LibbyNeural", command=gettext1)
aboutmenu.add_command(label="en-GB-MaisieNeural", command=gettext2)
aboutmenu.add_command(label="en-GB-en-GB-RyanNeural", command=gettext3)
aboutmenu.add_command(label="en-GB-SoniaNeural", command=gettext4)

aboutmenu.add_command(label="en-GB-ThomasNeural", command=gettext5)
aboutmenu.add_command(label="en-GB-MaisieNeural", command=gettext6)
aboutmenu.add_command(label="en-HK-SamNeural", command=gettext7)
aboutmenu.add_command(label="en-HK-YanNeural", command=gettext8)

aboutmenu.add_command(label="en-US-AnaNeural", command=gettext9)
aboutmenu.add_command(label="en-US-AriaNeural", command=gettext10)
aboutmenu.add_command(label="en-US-ChristopherNeural", command=gettext11)
aboutmenu.add_command(label="en-US-EricNeural", command=gettext12)

aboutmenu.add_command(label="en-US-GuyNeural", command=gettext13)
aboutmenu.add_command(label="en-US-JennyNeural", command=gettext14)
aboutmenu.add_command(label="en-US-MichelleNeural", command=gettext15)
aboutmenu.add_command(label="en-US-RogerNeural", command=gettext16)

aboutmenu.add_command(label="en-US-SteffanNeural ", command=gettext17)
aboutmenu.add_command(label="zh-CN-YunyangNeural", command=gettext18)
aboutmenu.add_command(label="zh-TW-YunJheNeural", command=gettext19)
aboutmenu.add_command(label="zh-TW-HsiaoChenNeural", command=gettext20)

aboutmenu.add_command(label="zh-TW-HsiaoYuNeural", command=gettext21)
aboutmenu.add_command(label="zh-CN-XiaoxiaoNeural", command=gettext22)
aboutmenu.add_command(label="zh-CN-XiaoyiNeural", command=gettext23)
aboutmenu.add_command(label="zh-CN-YunjianNeural", command=gettext24)



menubar.add_cascade(label="转成MP3", menu=aboutmenu)
top['menu'] = menubar
shortcutbar = Frame(top, height=25, bg='Silver')
shortcutbar.pack(expand=NO, fill=X)


textPad=Text(top, undo=True)

scroll=Scrollbar(textPad,width=15)
textPad.config(yscrollcommand=scroll.set,wrap="word",borderwidt=10,font=25)
scroll.config(command=textPad.yview)
textPad.pack(expand=YES, fill=BOTH)

 

textPad.bind("<Control-N>", new_file)
textPad.bind("<Control-n>", new_file)
textPad.bind("<Control-O>", open_file)
textPad.bind("<Control-o>", open_file)
textPad.bind("<Control-S>", save)
textPad.bind("<Control-s>", save)
textPad.bind("<Control-D>", delete)
textPad.bind("<Control-d>", delete)
textPad.bind("<Control-R>", rename_file)
textPad.bind("<Control-r>", rename_file)
textPad.bind("<Control-A>", select_all)
textPad.bind("<Control-a>", select_all)
 
textPad.bind("<Button-3>", mypopup)
top.mainloop()

注:以上代码进行二次编译合并。请安装相关的库才能使用。如有版权请通知删除。(edge_tts)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值