Update rvc.py
Browse files
rvc.py
CHANGED
@@ -1,10 +1,61 @@
|
|
1 |
from original import *
|
2 |
import shutil, glob
|
|
|
3 |
from easyfuncs import download_from_url, CachedModels
|
4 |
os.makedirs("dataset",exist_ok=True)
|
5 |
model_library = CachedModels()
|
6 |
|
7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
with gr.Row():
|
9 |
gr.HTML("<img src='file/a.png' alt='image'>")
|
10 |
with gr.Tabs():
|
@@ -26,6 +77,21 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
26 |
value=0
|
27 |
)
|
28 |
but0 = gr.Button(value="Convert", variant="primary")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
with gr.Row():
|
30 |
with gr.Column():
|
31 |
with gr.Row():
|
@@ -198,7 +264,7 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
198 |
choices=["40k", "32k"],
|
199 |
value="32k",
|
200 |
interactive=True,
|
201 |
-
visible=
|
202 |
)
|
203 |
if_f0_3 = gr.Radio(
|
204 |
label="Will your model be used for singing? If not, you can ignore this.",
|
@@ -212,14 +278,14 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
212 |
choices=["v1", "v2"],
|
213 |
value="v2",
|
214 |
interactive=True,
|
215 |
-
visible=False,
|
216 |
)
|
217 |
dataset_folder = gr.Textbox(
|
218 |
label="dataset folder", value='dataset'
|
219 |
)
|
220 |
easy_uploader = gr.Files(label="Drop your audio files here",file_types=['audio'])
|
221 |
-
|
222 |
-
info1 = gr.Textbox(label="Information", value="",visible=True)
|
223 |
easy_uploader.upload(inputs=[dataset_folder],outputs=[],fn=lambda folder:os.makedirs(folder,exist_ok=True))
|
224 |
easy_uploader.upload(
|
225 |
fn=lambda files,folder: [shutil.copy2(f.name,os.path.join(folder,os.path.split(f.name)[1])) for f in files] if folder != "" else gr.Warning('Please enter a folder name for your dataset'),
|
@@ -243,12 +309,11 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
243 |
interactive=True,
|
244 |
visible=False
|
245 |
)
|
246 |
-
|
247 |
-
|
248 |
-
[
|
249 |
-
[
|
250 |
-
|
251 |
-
)
|
252 |
with gr.Column():
|
253 |
f0method8 = gr.Radio(
|
254 |
label="F0 extraction method",
|
@@ -262,27 +327,6 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
262 |
interactive=True,
|
263 |
visible=F0GPUVisible,
|
264 |
)
|
265 |
-
but2 = gr.Button("2. Extract Features", variant="primary")
|
266 |
-
info2 = gr.Textbox(label="Information", value="", max_lines=8)
|
267 |
-
f0method8.change(
|
268 |
-
fn=change_f0_method,
|
269 |
-
inputs=[f0method8],
|
270 |
-
outputs=[gpus_rmvpe],
|
271 |
-
)
|
272 |
-
but2.click(
|
273 |
-
extract_f0_feature,
|
274 |
-
[
|
275 |
-
gpus6,
|
276 |
-
np7,
|
277 |
-
f0method8,
|
278 |
-
if_f0_3,
|
279 |
-
training_name,
|
280 |
-
version19,
|
281 |
-
gpus_rmvpe,
|
282 |
-
],
|
283 |
-
[info2],
|
284 |
-
api_name="train_extract_f0_feature",
|
285 |
-
)
|
286 |
with gr.Column():
|
287 |
total_epoch11 = gr.Slider(
|
288 |
minimum=2,
|
@@ -292,6 +336,8 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
292 |
value=150,
|
293 |
interactive=True,
|
294 |
)
|
|
|
|
|
295 |
but4 = gr.Button("3. Train Index", variant="primary")
|
296 |
but3 = gr.Button("4. Train Model", variant="primary")
|
297 |
info3 = gr.Textbox(label="Information", value="", max_lines=10)
|
@@ -380,6 +426,26 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
380 |
)
|
381 |
with gr.Row():
|
382 |
but5 = gr.Button("1 Click Training", variant="primary", visible=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
383 |
but3.click(
|
384 |
click_train,
|
385 |
[
|
@@ -401,6 +467,7 @@ with gr.Blocks(title="🔊",theme=gr.themes.Base(primary_hue="rose",neutral_hue=
|
|
401 |
info3,
|
402 |
api_name="train_start",
|
403 |
)
|
|
|
404 |
but4.click(train_index, [training_name, version19], info3)
|
405 |
but5.click(
|
406 |
train1key,
|
|
|
1 |
from original import *
|
2 |
import shutil, glob
|
3 |
+
from infer_rvc_python import BaseLoader
|
4 |
from easyfuncs import download_from_url, CachedModels
|
5 |
os.makedirs("dataset",exist_ok=True)
|
6 |
model_library = CachedModels()
|
7 |
|
8 |
+
|
9 |
+
|
10 |
+
|
11 |
+
# Initialize the converter
|
12 |
+
converter = BaseLoader(only_cpu=False, hubert_path=None, rmvpe_path=None)
|
13 |
+
|
14 |
+
import gradio as gr
|
15 |
+
import os
|
16 |
+
from infer_rvc_python import BaseLoader
|
17 |
+
|
18 |
+
# Initialize the converter
|
19 |
+
converter = BaseLoader(only_cpu=False, hubert_path=None, rmvpe_path=None)
|
20 |
+
|
21 |
+
def apply_conversion(audio_files, file_model, file_index, pitch_lvl, pitch_algo):
|
22 |
+
converter.apply_conf(
|
23 |
+
tag=file_model,
|
24 |
+
file_model=file_model,
|
25 |
+
pitch_algo=pitch_algo,
|
26 |
+
pitch_lvl=int(pitch_lvl), # pitch_lvl should be an integer
|
27 |
+
file_index=file_index,
|
28 |
+
index_influence=0.66,
|
29 |
+
respiration_median_filtering=3,
|
30 |
+
envelope_ratio=0.25,
|
31 |
+
consonant_breath_protection=0.33
|
32 |
+
)
|
33 |
+
|
34 |
+
speakers_list = [file_model] # It should be a list if multiple speakers are possible
|
35 |
+
|
36 |
+
result = converter(
|
37 |
+
audio_files,
|
38 |
+
speakers_list,
|
39 |
+
overwrite=False,
|
40 |
+
parallel_workers=4
|
41 |
+
)
|
42 |
+
|
43 |
+
output_path = "output_audio.wav"
|
44 |
+
# Assuming `result` is an array of audio data, save it to a file
|
45 |
+
result[0].export(output_path, format="wav") # This is an example, modify as needed for your data type
|
46 |
+
|
47 |
+
return output_path
|
48 |
+
|
49 |
+
|
50 |
+
|
51 |
+
|
52 |
+
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
|
57 |
+
|
58 |
+
with gr.Blocks(title="Easy 🔊 GUI",theme="Hev832/Applio") as app:
|
59 |
with gr.Row():
|
60 |
gr.HTML("<img src='file/a.png' alt='image'>")
|
61 |
with gr.Tabs():
|
|
|
77 |
value=0
|
78 |
)
|
79 |
but0 = gr.Button(value="Convert", variant="primary")
|
80 |
+
with gr.TabItem("Inference v2!"):
|
81 |
+
audio_files_input = gr.Audio(label="your audios")
|
82 |
+
file_model_input = gr.Dropdown(label="Model Voice", choices=sorted(names), value=lambda:sorted(names)[0] if len(sorted(names)) > 0 else '', interactive=True)
|
83 |
+
file_index_input = gr.Dropdown(label="Change Index",choices=sorted(index_paths),interactive=True,value=sorted(index_paths)[0] if len(sorted(index_paths)) > 0 else '')
|
84 |
+
pitch_lvl_input = gr.Number(label="Pitch",value=0)
|
85 |
+
pitch_algo_input = gr.Dropdown(["pm", "harvest", "crepe", "rmvpe", "rmvpe+"], label="Pitch Algorithm")
|
86 |
+
submit_button = gr.Button("Convert Audio")
|
87 |
+
output_Audio= gr.Audio(label="Conversion Result")
|
88 |
+
submit_button.click(
|
89 |
+
apply_conversion,
|
90 |
+
inputs=[audio_files_input, file_model_input, file_index_input, pitch_lvl_input, pitch_algo_input],
|
91 |
+
outputs=output_audio
|
92 |
+
)
|
93 |
+
|
94 |
+
|
95 |
with gr.Row():
|
96 |
with gr.Column():
|
97 |
with gr.Row():
|
|
|
264 |
choices=["40k", "32k"],
|
265 |
value="32k",
|
266 |
interactive=True,
|
267 |
+
visible=true
|
268 |
)
|
269 |
if_f0_3 = gr.Radio(
|
270 |
label="Will your model be used for singing? If not, you can ignore this.",
|
|
|
278 |
choices=["v1", "v2"],
|
279 |
value="v2",
|
280 |
interactive=True,
|
281 |
+
visible=False, # this is default
|
282 |
)
|
283 |
dataset_folder = gr.Textbox(
|
284 |
label="dataset folder", value='dataset'
|
285 |
)
|
286 |
easy_uploader = gr.Files(label="Drop your audio files here",file_types=['audio'])
|
287 |
+
|
288 |
+
#info1 = gr.Textbox(label="Information", value="",visible=True)
|
289 |
easy_uploader.upload(inputs=[dataset_folder],outputs=[],fn=lambda folder:os.makedirs(folder,exist_ok=True))
|
290 |
easy_uploader.upload(
|
291 |
fn=lambda files,folder: [shutil.copy2(f.name,os.path.join(folder,os.path.split(f.name)[1])) for f in files] if folder != "" else gr.Warning('Please enter a folder name for your dataset'),
|
|
|
309 |
interactive=True,
|
310 |
visible=False
|
311 |
)
|
312 |
+
f0method8.change(
|
313 |
+
fn=change_f0_method,
|
314 |
+
inputs=[f0method8],
|
315 |
+
outputs=[gpus_rmvpe],
|
316 |
+
)
|
|
|
317 |
with gr.Column():
|
318 |
f0method8 = gr.Radio(
|
319 |
label="F0 extraction method",
|
|
|
327 |
interactive=True,
|
328 |
visible=F0GPUVisible,
|
329 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
330 |
with gr.Column():
|
331 |
total_epoch11 = gr.Slider(
|
332 |
minimum=2,
|
|
|
336 |
value=150,
|
337 |
interactive=True,
|
338 |
)
|
339 |
+
but1 = gr.Button("1. Process", variant="primary")
|
340 |
+
but2 = gr.Button("2. Extract Features", variant="primary")
|
341 |
but4 = gr.Button("3. Train Index", variant="primary")
|
342 |
but3 = gr.Button("4. Train Model", variant="primary")
|
343 |
info3 = gr.Textbox(label="Information", value="", max_lines=10)
|
|
|
426 |
)
|
427 |
with gr.Row():
|
428 |
but5 = gr.Button("1 Click Training", variant="primary", visible=False)
|
429 |
+
but1.click(
|
430 |
+
preprocess_dataset,
|
431 |
+
[dataset_folder, training_name, sr2, np7],
|
432 |
+
[info3],
|
433 |
+
api_name="train_preprocess",
|
434 |
+
)
|
435 |
+
but2.click(
|
436 |
+
extract_f0_feature,
|
437 |
+
[
|
438 |
+
gpus6,
|
439 |
+
np7,
|
440 |
+
f0method8,
|
441 |
+
if_f0_3,
|
442 |
+
training_name,
|
443 |
+
version19,
|
444 |
+
gpus_rmvpe,
|
445 |
+
],
|
446 |
+
info3,
|
447 |
+
api_name="train_extract_f0_feature",
|
448 |
+
)
|
449 |
but3.click(
|
450 |
click_train,
|
451 |
[
|
|
|
467 |
info3,
|
468 |
api_name="train_start",
|
469 |
)
|
470 |
+
|
471 |
but4.click(train_index, [training_name, version19], info3)
|
472 |
but5.click(
|
473 |
train1key,
|