File size: 3,901 Bytes
632f309
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import tkinter as tk
import tkinter.filedialog
import tkinter.ttk as ttk
import tkinter as tk
from tkinter import ttk
import wave
from utils.hparams import hparams
from preprocessing.data_gen_utils import get_pitch_parselmouth,get_pitch_crepe
import numpy as np
import IPython.display as ipd
import utils
import librosa
import torchcrepe
from infer import *
import logging
from infer_tools.infer_tool import *
from tkinter import Label
from time import sleep
import os
# Create the main window
window = tk.Tk()

# Set the window title and size

window.title("Diff-SVC Rendering Tool")
window.geometry("250x400")

# console Textbox
textbox = tk.Text(window)
textbox.grid(row=4, column=0, padx=20, pady=20, sticky="nsew")

loading_animation_label = Label(window)
loading_animation_label.grid(row=5, column=0)

# Set the column and row to stretch to fill the available space
window.grid_columnconfigure(0, weight=1)
window.grid_rowconfigure(4, weight=1)

button1 = ttk.Button(window, text="Load Model")
button1.grid(row=0, column=0, padx=20, pady=20)

pb = ttk.Progressbar(
    window,
    orient='horizontal',
    mode='indeterminate',
    length=250
)
def start():
    pb.grid(column=0, row=5, padx=0, pady=0)
    pb.start(10)

def stop():
    pb.stop()
    pb.grid_remove()
def button1_clicked():
    filepath1 = tkinter.filedialog.askopenfilename(title = "Select CKPT File", filetypes=[("Checkpoint files", "*.ckpt")])
    if filepath1 == '':
        tkinter.messagebox.showerror("Error", "No CKPT file selected")
        return
    filepath2 = tkinter.filedialog.askopenfilename(title = "Select YAML File",filetypes=[("Yaml files", "*.yaml")])
    if filepath2 == '':
        tkinter.messagebox.showerror("Error", "No YAML file selected")
        return
    model_path = filepath1
    config_path = filepath2
    logging.getLogger('numba').setLevel(logging.WARNING)
    start()
    # Show a dialog box to input text
    global project_name
    project_name = tkinter.simpledialog.askstring("Input", "Enter project name:", parent=window)
    if project_name == '':
        tkinter.messagebox.showerror("Error", "No Project Name")
        return
    # Use the input text and the value of hubert_gpu as arguments when creating an instance of the Svc class
    global svc_model
    hubert_gpu = False
    svc_model = Svc(project_name, config_path, hubert_gpu, model_path)
    textbox.insert('end', 'model loaded\n')
    stop()


# Assign the callback function to the button's "command" attribute
button1["command"] = button1_clicked

button2 = ttk.Button(window, text="Start Rendering")
button2.grid(row=1, column=0, padx=20, pady=20)

# Define a callback function for the second button
def button2_clicked():
    # Open a file selection dialog for WAV files
    filepath = tkinter.filedialog.askopenfilename(filetypes=[("WAV files", "*.wav")])

    # Show a dialog box to input the "key" value
    key = tkinter.simpledialog.askinteger("Input", "Enter key value:", parent=window)
    textbox.insert('end', 'Rendering Started, please wait...\n')
    start()
    wav_gen = tkinter.simpledialog.askstring("Input", "Enter the track name:", parent=window)
    if not wav_gen.endswith('.wav'):
        wav_gen += '.wav'
    wav_fn = filepath
    demoaudio, sr = librosa.load(wav_fn)
    pndm_speedup = 20
    f0_tst, f0_pred, audio = run_clip(svc_model,file_path=wav_fn, key=key, acc=pndm_speedup, use_crepe=True, use_pe=True, thre=0.05,
                                        use_gt_mel=False, add_noise_step=500,project_name=project_name,out_path=wav_gen)
    time.sleep(2)
    textbox.insert('end', 'Rendering process done!\nPlaying Audio now...')
    os.startfile(wav_gen)
    stop()
button2["command"] = button2_clicked
#Checkbox
hubert_gpu = tk.BooleanVar()
checkbox = tk.Checkbutton(window, text="Use GPU", variable=hubert_gpu)
checkbox.grid(row=3, column=0)

# Start the event loop
window.mainloop()