wav2lip/ui.py

99 lines
3.3 KiB
Python
Raw Normal View History

2024-09-21 14:18:09 +00:00
#encoding = utf8
import json
import logging
import tkinter
import tkinter.messagebox
import customtkinter
import requests
from urllib.parse import urlencode
from Human import Human
from tts.EdgeTTS import EdgeTTS
logger = logging.getLogger(__name__)
customtkinter.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light"
customtkinter.set_default_color_theme("green") # Themes: "blue" (standard), "green", "dark-blue"
class App(customtkinter.CTk):
def __init__(self):
super().__init__()
self._tts_url = 'http://localhost:8080'
# configure window
self.title("数字人测试demo")
self.geometry(f"{1100}x{580}")
self.grid_columnconfigure(1, weight=1)
self.grid_rowconfigure((0, 1), weight=1)
self.image_frame = customtkinter.CTkFrame(self, corner_radius=10)
self.image_frame.grid(row=0, column=0, rowspan=2, columnspan=3,
padx=(20, 20), pady=(20, 0), sticky="nsew")
self.image_frame.grid_rowconfigure(0, weight=1)
self.logo_label = customtkinter.CTkLabel(self.image_frame, text="CustomTkinter",
font=customtkinter.CTkFont(size=20, weight="bold"))
# self.logo_label.grid(row=0, column=0, padx=20, pady=(20, 10))
self.entry = customtkinter.CTkEntry(self, placeholder_text="输入内容")
self.entry.grid(row=2, column=0, columnspan=2, padx=(20, 0), pady=(20, 20), sticky="nsew")
self.main_button_1 = customtkinter.CTkButton(master=self, fg_color="transparent", border_width=2,
text_color=("gray10", "#DCE4EE"), text='发送',
command=self.request_tts)
self.main_button_1.grid(row=2, column=2, padx=(20, 20), pady=(20, 20), sticky="nsew")
self._init_image_canvas()
self._human = Human()
tts = EdgeTTS(self._human)
self._human.set_tts(tts)
def _init_image_canvas(self):
self._canvas = customtkinter.CTkCanvas(self.image_frame)
self._canvas.pack(fill=customtkinter.BOTH, expand=customtkinter.YES)
def request_tts(self):
content = self.entry.get()
print('content:', content)
self.entry.delete(0, customtkinter.END)
payload = {
'text': content,
'voice': 'zh-CN-XiaoyiNeural'
}
resp = requests.get(self._tts_url + '/tts', params=urlencode(payload))
if resp.status_code != 200:
print('tts error', resp.status_code)
return
print(resp.content)
resJson = json.loads(resp.text)
url = resJson.get('url')
self.download_tts(url)
def download_tts(self, url):
file_name = url[3:]
print(file_name)
download_url = self._tts_url + url
print('download tts', download_url)
resp = requests.get(download_url)
with open('./audio/mp3/' + file_name, 'wb') as mp3:
mp3.write(resp.content)
from pydub import AudioSegment
sound = AudioSegment.from_mp3('./audio/mp3/' + file_name)
sound.export('./audio/wav/' + file_name + '.wav', format="wav")
# open('./audio/', 'wb') with
if __name__ == "__main__":
logging.basicConfig(filename='./logs/info.log', level=logging.INFO)
app = App()
app.mainloop()