#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()