mirror of
https://github.com/Mangio621/Mangio-RVC-Fork.git
synced 2025-12-16 03:27:41 +01:00
Revert "Merge pull request #53 from alexlnkp/main"
This reverts commita2ce6d744b, reversing changes made to91dfaccac8.
This commit is contained in:
@@ -1,11 +1,3 @@
|
||||
# 7/25 Changelog:
|
||||
- Fixed the cli inferencing traceback.
|
||||
- SQL Databases implemented for formanting and training stop button.
|
||||
- Gradio browser tab renamed to `Mangio-RVC-Web 💻`.
|
||||
- Rudimentary functions from `infer-web.py` removed.
|
||||
- Formanting now accepts any audio format, as long as it is supported by FFmpeg.
|
||||
|
||||
|
||||
# 7/23 Changelog:
|
||||
- Fp16 detection now works how it did before the last RVC beta; no more training slowdowns compared to how it was before then
|
||||
- Logging on TensorBoard is now done per epoch. It logs every X steps in an epoch; therefore each point on the graph is now represented per-epoch.
|
||||
|
||||
@@ -19,8 +19,10 @@ f = open("%s/extract_f0_feature.log" % exp_dir, "a+")
|
||||
|
||||
DoFormant = False
|
||||
|
||||
Quefrency = 0.0
|
||||
Timbre = 0.0
|
||||
with open("formanting.txt", "r") as fvf:
|
||||
content = fvf.readlines()
|
||||
Quefrency, Timbre = content[1].split("\n")[0], content[2].split("\n")[0]
|
||||
|
||||
|
||||
def printt(strr):
|
||||
print(strr)
|
||||
|
||||
3
formanting.txt
Normal file
3
formanting.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
False
|
||||
8.0
|
||||
1.2
|
||||
324
infer-web.py
324
infer-web.py
@@ -43,44 +43,8 @@ from train.process_ckpt import change_info, extract_small_model, merge, show_inf
|
||||
from vc_infer_pipeline import VC
|
||||
from sklearn.cluster import MiniBatchKMeans
|
||||
|
||||
import sqlite3
|
||||
|
||||
def clear_sql(signal, frame):
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("DELETE FROM stop_train")
|
||||
conn.commit()
|
||||
conn.close()
|
||||
print("Clearing SQL database...")
|
||||
sys.exit(0)
|
||||
|
||||
if sys.platform == 'win32':
|
||||
signal.signal(signal.SIGBREAK, clear_sql)
|
||||
|
||||
signal.signal(signal.SIGINT, clear_sql)
|
||||
signal.signal(signal.SIGTERM, clear_sql)
|
||||
|
||||
|
||||
|
||||
logging.getLogger("numba").setLevel(logging.WARNING)
|
||||
|
||||
conn = sqlite3.connect('TEMP/db:cachedb?mode=memory&cache=shared', check_same_thread=False)
|
||||
cursor = conn.cursor()
|
||||
|
||||
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS formant_data (
|
||||
Quefrency FLOAT,
|
||||
Timbre FLOAT,
|
||||
DoFormant INTEGER
|
||||
)
|
||||
""")
|
||||
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS stop_train (
|
||||
stop BOOL
|
||||
)
|
||||
""")
|
||||
|
||||
tmp = os.path.join(now_dir, "TEMP")
|
||||
shutil.rmtree(tmp, ignore_errors=True)
|
||||
@@ -88,29 +52,21 @@ shutil.rmtree("%s/runtime/Lib/site-packages/infer_pack" % (now_dir), ignore_erro
|
||||
shutil.rmtree("%s/runtime/Lib/site-packages/uvr5_pack" % (now_dir), ignore_errors=True)
|
||||
os.makedirs(tmp, exist_ok=True)
|
||||
os.makedirs(os.path.join(now_dir, "logs"), exist_ok=True)
|
||||
os.makedirs(os.path.join(now_dir, "audios"), exist_ok=True)
|
||||
os.makedirs(os.path.join(now_dir, "datasets"), exist_ok=True)
|
||||
os.makedirs(os.path.join(now_dir, "weights"), exist_ok=True)
|
||||
os.environ["TEMP"] = tmp
|
||||
warnings.filterwarnings("ignore")
|
||||
torch.manual_seed(114514)
|
||||
|
||||
global DoFormant, Quefrency, Timbre
|
||||
DoFormant = False
|
||||
Quefrency = 8.0
|
||||
Timbre = 1.2
|
||||
|
||||
with open('formanting.txt', 'w+') as fsf:
|
||||
fsf.truncate(0)
|
||||
|
||||
try:
|
||||
cursor.execute("SELECT Quefrency, Timbre, DoFormant FROM formant_data")
|
||||
Quefrency, Timbre, DoFormant = cursor.fetchone()
|
||||
|
||||
except Exception:
|
||||
Quefrency = 8.0
|
||||
Timbre = 1.2
|
||||
DoFormant = False
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("DELETE FROM stop_train")
|
||||
cursor.execute("INSERT INTO formant_data (Quefrency, Timbre, DoFormant) VALUES (?, ?, ?)", (Quefrency, Timbre, 0))
|
||||
conn.commit()
|
||||
fsf.writelines([str(DoFormant) + '\n', str(Quefrency) + '\n', str(Timbre) + '\n'])
|
||||
|
||||
|
||||
config = Config()
|
||||
i18n = I18nAuto()
|
||||
i18n.print()
|
||||
@@ -168,8 +124,18 @@ else:
|
||||
default_batch_size = 1
|
||||
gpus = "-".join([i[0] for i in gpu_infos])
|
||||
|
||||
hubert_model = None
|
||||
|
||||
class ToolButton(gr.Button, gr.components.FormComponent):
|
||||
"""Small button with single emoji as text, fits inside gradio forms"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(variant="tool", **kwargs)
|
||||
|
||||
def get_block_name(self):
|
||||
return "button"
|
||||
|
||||
|
||||
hubert_model = None
|
||||
|
||||
|
||||
def load_hubert():
|
||||
@@ -190,7 +156,10 @@ def load_hubert():
|
||||
weight_root = "weights"
|
||||
weight_uvr5_root = "uvr5_weights"
|
||||
index_root = "./logs/"
|
||||
global audio_root
|
||||
audio_root = "audios"
|
||||
global input_audio_path0
|
||||
global input_audio_path1
|
||||
names = []
|
||||
for name in os.listdir(weight_root):
|
||||
if name.endswith(".pth"):
|
||||
@@ -259,6 +228,17 @@ def get_fshift_presets():
|
||||
return ''
|
||||
|
||||
|
||||
def get_audios():
|
||||
if check_for_name() != '':
|
||||
audios_path= '"' + os.path.abspath(os.getcwd()) + '/audios/'
|
||||
if os.path.exists(audios_path):
|
||||
for file in os.listdir(audios_path):
|
||||
print(audios_path.join(file) + '"')
|
||||
return os.path.join(audios_path, file + '"')
|
||||
return ''
|
||||
else:
|
||||
return ''
|
||||
|
||||
|
||||
def vc_single(
|
||||
sid,
|
||||
@@ -646,13 +626,14 @@ def if_done_multi(done, ps):
|
||||
done[0] = True
|
||||
|
||||
def formant_enabled(cbox, qfrency, tmbre, frmntapply, formantpreset, formant_refresh_button):
|
||||
|
||||
if (cbox):
|
||||
|
||||
DoFormant = True
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("INSERT INTO formant_data (Quefrency, Timbre, DoFormant) VALUES (?, ?, ?)", (qfrency, tmbre, 1))
|
||||
conn.commit()
|
||||
|
||||
with open('formanting.txt', 'w') as fxxf:
|
||||
fxxf.truncate(0)
|
||||
|
||||
fxxf.writelines([str(DoFormant) + '\n', str(Quefrency) + '\n', str(Timbre) + '\n'])
|
||||
#print(f"is checked? - {cbox}\ngot {DoFormant}")
|
||||
|
||||
return (
|
||||
@@ -668,10 +649,10 @@ def formant_enabled(cbox, qfrency, tmbre, frmntapply, formantpreset, formant_ref
|
||||
else:
|
||||
|
||||
DoFormant = False
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("INSERT INTO formant_data (Quefrency, Timbre, DoFormant) VALUES (?, ?, ?)", (qfrency, tmbre, int(DoFormant)))
|
||||
conn.commit()
|
||||
|
||||
with open('formanting.txt', 'w') as fxf:
|
||||
fxf.truncate(0)
|
||||
|
||||
fxf.writelines([str(DoFormant) + '\n', str(Quefrency) + '\n', str(Timbre) + '\n'])
|
||||
#print(f"is checked? - {cbox}\ngot {DoFormant}")
|
||||
return (
|
||||
{"value": False, "__type__": "update"},
|
||||
@@ -688,10 +669,11 @@ def formant_apply(qfrency, tmbre):
|
||||
Quefrency = qfrency
|
||||
Timbre = tmbre
|
||||
DoFormant = True
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("INSERT INTO formant_data (Quefrency, Timbre, DoFormant) VALUES (?, ?, ?)", (qfrency, tmbre, 1))
|
||||
conn.commit()
|
||||
|
||||
with open('formanting.txt', 'w') as fxxxf:
|
||||
fxxxf.truncate(0)
|
||||
|
||||
fxxxf.writelines([str(DoFormant) + '\n', str(Quefrency) + '\n', str(Timbre) + '\n'])
|
||||
return ({"value": Quefrency, "__type__": "update"}, {"value": Timbre, "__type__": "update"})
|
||||
|
||||
def update_fshift_presets(preset, qfrency, tmbre):
|
||||
@@ -846,12 +828,12 @@ def change_sr2(sr2, if_f0_3, version19):
|
||||
if not if_pretrained_generator_exist:
|
||||
print(
|
||||
"pretrained%s/%sG%s.pth" % (path_str, f0_str, sr2),
|
||||
"doesn't exist, will not use pretrained model",
|
||||
"not exist, will not use pretrained model",
|
||||
)
|
||||
if not if_pretrained_discriminator_exist:
|
||||
print(
|
||||
"pretrained%s/%sD%s.pth" % (path_str, f0_str, sr2),
|
||||
"doesn't exist, will not use pretrained model",
|
||||
"not exist, will not use pretrained model",
|
||||
)
|
||||
return (
|
||||
"pretrained%s/%sG%s.pth" % (path_str, f0_str, sr2)
|
||||
@@ -882,12 +864,12 @@ def change_version19(sr2, if_f0_3, version19):
|
||||
if not if_pretrained_generator_exist:
|
||||
print(
|
||||
"pretrained%s/%sG%s.pth" % (path_str, f0_str, sr2),
|
||||
"doesn't exist, will not use pretrained model",
|
||||
"not exist, will not use pretrained model",
|
||||
)
|
||||
if not if_pretrained_discriminator_exist:
|
||||
print(
|
||||
"pretrained%s/%sD%s.pth" % (path_str, f0_str, sr2),
|
||||
"doesn't exist, will not use pretrained model",
|
||||
"not exist, will not use pretrained model",
|
||||
)
|
||||
return (
|
||||
"pretrained%s/%sG%s.pth" % (path_str, f0_str, sr2)
|
||||
@@ -989,8 +971,6 @@ def click_train(
|
||||
if_save_every_weights18,
|
||||
version19,
|
||||
):
|
||||
cursor.execute("DELETE FROM stop_train")
|
||||
conn.commit()
|
||||
# 生成filelist
|
||||
exp_dir = "%s/logs/%s" % (now_dir, exp_dir1)
|
||||
os.makedirs(exp_dir, exist_ok=True)
|
||||
@@ -1566,26 +1546,10 @@ def cli_infer(com):
|
||||
mix = float(com[10])
|
||||
feature_ratio = float(com[11])
|
||||
protection_amnt = float(com[12])
|
||||
protect1 = 0.5
|
||||
|
||||
if com[14] == 'False' or com[14] == 'false':
|
||||
DoFormant = False
|
||||
Quefrency = 0.0
|
||||
Timbre = 0.0
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("INSERT INTO formant_data (Quefrency, Timbre, DoFormant) VALUES (?, ?, ?)", (Quefrency, Timbre, 0))
|
||||
conn.commit()
|
||||
|
||||
else:
|
||||
DoFormant = True
|
||||
Quefrency = float(com[15])
|
||||
Timbre = float(com[16])
|
||||
cursor.execute("DELETE FROM formant_data")
|
||||
cursor.execute("INSERT INTO formant_data (Quefrency, Timbre, DoFormant) VALUES (?, ?, ?)", (Quefrency, Timbre, 1))
|
||||
conn.commit()
|
||||
#####
|
||||
|
||||
print("Mangio-RVC-Fork Infer-CLI: Starting the inference...")
|
||||
vc_data = get_vc(model_name, protection_amnt, protect1)
|
||||
vc_data = get_vc(model_name)
|
||||
print(vc_data)
|
||||
print("Mangio-RVC-Fork Infer-CLI: Performing inference...")
|
||||
conversion_data = vc_single(
|
||||
@@ -1732,6 +1696,7 @@ def preset_apply(preset, qfer, tmbr):
|
||||
with open(str(preset), 'r') as p:
|
||||
content = p.readlines()
|
||||
qfer, tmbr = content[0].split('\n')[0], content[1]
|
||||
|
||||
formant_apply(qfer, tmbr)
|
||||
else:
|
||||
pass
|
||||
@@ -1739,86 +1704,70 @@ def preset_apply(preset, qfer, tmbr):
|
||||
|
||||
def print_page_details():
|
||||
if cli_current_page == "HOME":
|
||||
print(
|
||||
"\n go home : Takes you back to home with a navigation list."
|
||||
"\n go infer : Takes you to inference command execution."
|
||||
"\n go pre-process : Takes you to training step.1) pre-process command execution."
|
||||
"\n go extract-feature : Takes you to training step.2) extract-feature command execution."
|
||||
"\n go train : Takes you to training step.3) being or continue training command execution."
|
||||
"\n go train-feature : Takes you to the train feature index command execution."
|
||||
"\n go extract-model : Takes you to the extract small model command execution."
|
||||
)
|
||||
print(" go home : Takes you back to home with a navigation list.")
|
||||
print(" go infer : Takes you to inference command execution.\n")
|
||||
print(" go pre-process : Takes you to training step.1) pre-process command execution.")
|
||||
print(" go extract-feature : Takes you to training step.2) extract-feature command execution.")
|
||||
print(" go train : Takes you to training step.3) being or continue training command execution.")
|
||||
print(" go train-feature : Takes you to the train feature index command execution.\n")
|
||||
print(" go extract-model : Takes you to the extract small model command execution.")
|
||||
elif cli_current_page == "INFER":
|
||||
print(
|
||||
"\n arg 1) model name with .pth in ./weights: mi-test.pth"
|
||||
"\n arg 2) source audio path: myFolder\\MySource.wav"
|
||||
"\n arg 3) output file name to be placed in './audio-outputs': MyTest.wav"
|
||||
"\n arg 4) feature index file path: logs/mi-test/added_IVF3042_Flat_nprobe_1.index"
|
||||
"\n arg 5) speaker id: 0"
|
||||
"\n arg 6) transposition: 0"
|
||||
"\n arg 7) f0 method: harvest (pm, harvest, crepe, crepe-tiny, hybrid[x,x,x,x], mangio-crepe, mangio-crepe-tiny, rmvpe)"
|
||||
"\n arg 8) crepe hop length: 160"
|
||||
"\n arg 9) harvest median filter radius: 3 (0-7)"
|
||||
"\n arg 10) post resample rate: 0"
|
||||
"\n arg 11) mix volume envelope: 1"
|
||||
"\n arg 12) feature index ratio: 0.78 (0-1)"
|
||||
"\n arg 13) Voiceless Consonant Protection (Less Artifact): 0.33 (Smaller number = more protection. 0.50 means Dont Use.)"
|
||||
"\n arg 14) Whether to formant shift the inference audio before conversion: False (if set to false, you can ignore setting the quefrency and timbre values for formanting)"
|
||||
"\n arg 15)* Quefrency for formanting: 8.0 (no need to set if arg14 is False/false)"
|
||||
"\n arg 16)* Timbre for formanting: 1.2 (no need to set if arg14 is False/false) \n"
|
||||
"\nExample: mi-test.pth saudio/Sidney.wav myTest.wav logs/mi-test/added_index.index 0 -2 harvest 160 3 0 1 0.95 0.33 0.45 True 8.0 1.2"
|
||||
)
|
||||
print(" arg 1) model name with .pth in ./weights: mi-test.pth")
|
||||
print(" arg 2) source audio path: myFolder\\MySource.wav")
|
||||
print(" arg 3) output file name to be placed in './audio-outputs': MyTest.wav")
|
||||
print(" arg 4) feature index file path: logs/mi-test/added_IVF3042_Flat_nprobe_1.index")
|
||||
print(" arg 5) speaker id: 0")
|
||||
print(" arg 6) transposition: 0")
|
||||
print(" arg 7) f0 method: harvest (pm, harvest, crepe, crepe-tiny, hybrid[x,x,x,x], mangio-crepe, mangio-crepe-tiny)")
|
||||
print(" arg 8) crepe hop length: 160")
|
||||
print(" arg 9) harvest median filter radius: 3 (0-7)")
|
||||
print(" arg 10) post resample rate: 0")
|
||||
print(" arg 11) mix volume envelope: 1")
|
||||
print(" arg 12) feature index ratio: 0.78 (0-1)")
|
||||
print(" arg 13) Voiceless Consonant Protection (Less Artifact): 0.33 (Smaller number = more protection. 0.50 means Dont Use.) \n")
|
||||
print("Example: mi-test.pth saudio/Sidney.wav myTest.wav logs/mi-test/added_index.index 0 -2 harvest 160 3 0 1 0.95 0.33")
|
||||
elif cli_current_page == "PRE-PROCESS":
|
||||
print(
|
||||
"\n arg 1) Model folder name in ./logs: mi-test"
|
||||
"\n arg 2) Trainset directory: mydataset (or) E:\\my-data-set"
|
||||
"\n arg 3) Sample rate: 40k (32k, 40k, 48k)"
|
||||
"\n arg 4) Number of CPU threads to use: 8 \n"
|
||||
"\nExample: mi-test mydataset 40k 24"
|
||||
)
|
||||
print(" arg 1) Model folder name in ./logs: mi-test")
|
||||
print(" arg 2) Trainset directory: mydataset (or) E:\\my-data-set")
|
||||
print(" arg 3) Sample rate: 40k (32k, 40k, 48k)")
|
||||
print(" arg 4) Number of CPU threads to use: 8 \n")
|
||||
print("Example: mi-test mydataset 40k 24")
|
||||
elif cli_current_page == "EXTRACT-FEATURE":
|
||||
print(
|
||||
"\n arg 1) Model folder name in ./logs: mi-test"
|
||||
"\n arg 2) Gpu card slot: 0 (0-1-2 if using 3 GPUs)"
|
||||
"\n arg 3) Number of CPU threads to use: 8"
|
||||
"\n arg 4) Has Pitch Guidance?: 1 (0 for no, 1 for yes)"
|
||||
"\n arg 5) f0 Method: harvest (pm, harvest, dio, crepe)"
|
||||
"\n arg 6) Crepe hop length: 128"
|
||||
"\n arg 7) Version for pre-trained models: v2 (use either v1 or v2)\n"
|
||||
"\nExample: mi-test 0 24 1 harvest 128 v2"
|
||||
)
|
||||
print(" arg 1) Model folder name in ./logs: mi-test")
|
||||
print(" arg 2) Gpu card slot: 0 (0-1-2 if using 3 GPUs)")
|
||||
print(" arg 3) Number of CPU threads to use: 8")
|
||||
print(" arg 4) Has Pitch Guidance?: 1 (0 for no, 1 for yes)")
|
||||
print(" arg 5) f0 Method: harvest (pm, harvest, dio, crepe)")
|
||||
print(" arg 6) Crepe hop length: 128")
|
||||
print(" arg 7) Version for pre-trained models: v2 (use either v1 or v2)\n")
|
||||
print("Example: mi-test 0 24 1 harvest 128 v2")
|
||||
elif cli_current_page == "TRAIN":
|
||||
print(
|
||||
"\n arg 1) Model folder name in ./logs: mi-test"
|
||||
"\n arg 2) Sample rate: 40k (32k, 40k, 48k)"
|
||||
"\n arg 3) Has Pitch Guidance?: 1 (0 for no, 1 for yes)"
|
||||
"\n arg 4) speaker id: 0"
|
||||
"\n arg 5) Save epoch iteration: 50"
|
||||
"\n arg 6) Total epochs: 10000"
|
||||
"\n arg 7) Batch size: 8"
|
||||
"\n arg 8) Gpu card slot: 0 (0-1-2 if using 3 GPUs)"
|
||||
"\n arg 9) Save only the latest checkpoint: 0 (0 for no, 1 for yes)"
|
||||
"\n arg 10) Whether to cache training set to vram: 0 (0 for no, 1 for yes)"
|
||||
"\n arg 11) Save extracted small model every generation?: 0 (0 for no, 1 for yes)"
|
||||
"\n arg 12) Model architecture version: v2 (use either v1 or v2)\n"
|
||||
"\nExample: mi-test 40k 1 0 50 10000 8 0 0 0 0 v2"
|
||||
)
|
||||
print(" arg 1) Model folder name in ./logs: mi-test")
|
||||
print(" arg 2) Sample rate: 40k (32k, 40k, 48k)")
|
||||
print(" arg 3) Has Pitch Guidance?: 1 (0 for no, 1 for yes)")
|
||||
print(" arg 4) speaker id: 0")
|
||||
print(" arg 5) Save epoch iteration: 50")
|
||||
print(" arg 6) Total epochs: 10000")
|
||||
print(" arg 7) Batch size: 8")
|
||||
print(" arg 8) Gpu card slot: 0 (0-1-2 if using 3 GPUs)")
|
||||
print(" arg 9) Save only the latest checkpoint: 0 (0 for no, 1 for yes)")
|
||||
print(" arg 10) Whether to cache training set to vram: 0 (0 for no, 1 for yes)")
|
||||
print(" arg 11) Save extracted small model every generation?: 0 (0 for no, 1 for yes)")
|
||||
print(" arg 12) Model architecture version: v2 (use either v1 or v2)\n")
|
||||
print("Example: mi-test 40k 1 0 50 10000 8 0 0 0 0 v2")
|
||||
elif cli_current_page == "TRAIN-FEATURE":
|
||||
print(
|
||||
"\n arg 1) Model folder name in ./logs: mi-test"
|
||||
"\n arg 2) Model architecture version: v2 (use either v1 or v2)\n"
|
||||
"\nExample: mi-test v2"
|
||||
)
|
||||
print(" arg 1) Model folder name in ./logs: mi-test")
|
||||
print(" arg 2) Model architecture version: v2 (use either v1 or v2)\n")
|
||||
print("Example: mi-test v2")
|
||||
elif cli_current_page == "EXTRACT-MODEL":
|
||||
print(
|
||||
"\n arg 1) Model Path: logs/mi-test/G_168000.pth"
|
||||
"\n arg 2) Model save name: MyModel"
|
||||
"\n arg 3) Sample rate: 40k (32k, 40k, 48k)"
|
||||
"\n arg 4) Has Pitch Guidance?: 1 (0 for no, 1 for yes)"
|
||||
'\n arg 5) Model information: "My Model"'
|
||||
"\n arg 6) Model architecture version: v2 (use either v1 or v2)\n"
|
||||
'\nExample: logs/mi-test/G_168000.pth MyModel 40k 1 "Created by Cole Mangio" v2'
|
||||
)
|
||||
print(" arg 1) Model Path: logs/mi-test/G_168000.pth")
|
||||
print(" arg 2) Model save name: MyModel")
|
||||
print(" arg 3) Sample rate: 40k (32k, 40k, 48k)")
|
||||
print(" arg 4) Has Pitch Guidance?: 1 (0 for no, 1 for yes)")
|
||||
print(' arg 5) Model information: "My Model"')
|
||||
print(" arg 6) Model architecture version: v2 (use either v1 or v2)\n")
|
||||
print('Example: logs/mi-test/G_168000.pth MyModel 40k 1 "Created by Cole Mangio" v2')
|
||||
print("")
|
||||
|
||||
def change_page(page):
|
||||
global cli_current_page
|
||||
@@ -1860,7 +1809,7 @@ def execute_command(com):
|
||||
|
||||
def cli_navigation_loop():
|
||||
while True:
|
||||
print("\nYou are currently in '%s':" % cli_current_page)
|
||||
print("You are currently in '%s':" % cli_current_page)
|
||||
print_page_details()
|
||||
command = input("%s: " % cli_current_page)
|
||||
try:
|
||||
@@ -1905,11 +1854,11 @@ def match_index(sid0):
|
||||
if filename.endswith(".index"):
|
||||
for i in range(len(indexes_list)):
|
||||
if indexes_list[i] == (os.path.join(("./logs/" + folder), filename).replace('\\','/')):
|
||||
#print('regular index found')
|
||||
print('regular index found')
|
||||
break
|
||||
else:
|
||||
if indexes_list[i] == (os.path.join(("./logs/" + folder.lower()), filename).replace('\\','/')):
|
||||
#print('lowered index found')
|
||||
print('lowered index found')
|
||||
parent_dir = "./logs/" + folder.lower()
|
||||
break
|
||||
#elif (indexes_list[i]).casefold() == ((os.path.join(("./logs/" + folder), filename).replace('\\','/')).casefold()):
|
||||
@@ -1938,11 +1887,17 @@ def match_index(sid0):
|
||||
#print('nothing found')
|
||||
return ('', '')
|
||||
|
||||
def choveraudio():
|
||||
return ''
|
||||
|
||||
|
||||
def stoptraining(mim):
|
||||
if int(mim) == 1:
|
||||
|
||||
cursor.execute("INSERT INTO stop_train (stop) VALUES (?)", (True,))
|
||||
conn.commit()
|
||||
with open("stop.txt", "w+") as tostops:
|
||||
|
||||
|
||||
tostops.writelines('stop')
|
||||
#p.terminate()
|
||||
#p.kill()
|
||||
try:
|
||||
@@ -1965,8 +1920,8 @@ def whethercrepeornah(radio):
|
||||
return ({"visible": mango, "__type__": "update"})
|
||||
|
||||
|
||||
#Change your Gradio Theme here. 👇 👇 👇 👇 Example: " theme='HaleyCH/HaleyCH_Theme' "
|
||||
with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
#Change your Gradio Theme here. 👇 👇 👇 👇
|
||||
with gr.Blocks(theme=gr.themes.Soft()) as app:
|
||||
gr.HTML("<h1> The Mangio-RVC-Fork 💻 </h1>")
|
||||
gr.Markdown(
|
||||
value=i18n(
|
||||
@@ -2021,10 +1976,10 @@ with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
input_audio1 = gr.Dropdown(
|
||||
label=i18n("Auto detect audio path and select from the dropdown:"),
|
||||
choices=sorted(audio_paths),
|
||||
value='',
|
||||
value=get_audios(),
|
||||
interactive=True,
|
||||
)
|
||||
input_audio1.change(fn=lambda:'',inputs=[],outputs=[input_audio0])
|
||||
input_audio1.change(fn=choveraudio,inputs=[],outputs=[input_audio0])
|
||||
f0method0 = gr.Radio(
|
||||
label=i18n(
|
||||
"选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比,crepe效果好但吃GPU"
|
||||
@@ -2112,8 +2067,8 @@ with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
interactive=True,
|
||||
)
|
||||
formanting = gr.Checkbox(
|
||||
value=bool(DoFormant),
|
||||
label="[EXPERIMENTAL] Formant shift inference audio",
|
||||
value=False,
|
||||
label="[EXPERIMENTAL, WAV ONLY] Formant shift inference audio",
|
||||
info="Used for male to female and vice-versa conversions",
|
||||
interactive=True,
|
||||
visible=True,
|
||||
@@ -2123,14 +2078,11 @@ with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
value='',
|
||||
choices=get_fshift_presets(),
|
||||
label="browse presets for formanting",
|
||||
visible=bool(DoFormant),
|
||||
)
|
||||
|
||||
formant_refresh_button = gr.Button(
|
||||
value='\U0001f504',
|
||||
visible=bool(DoFormant),
|
||||
variant='primary',
|
||||
visible=False,
|
||||
)
|
||||
formant_refresh_button = gr.Button(value='\U0001f504', visible=False,variant='primary')
|
||||
#formant_refresh_button = ToolButton( elem_id='1')
|
||||
#create_refresh_button(formant_preset, lambda: {"choices": formant_preset}, "refresh_list_shiftpresets")
|
||||
|
||||
qfrency = gr.Slider(
|
||||
value=Quefrency,
|
||||
@@ -2138,22 +2090,21 @@ with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
minimum=-16.0,
|
||||
maximum=16.0,
|
||||
step=0.1,
|
||||
visible=bool(DoFormant),
|
||||
visible=False,
|
||||
interactive=True,
|
||||
)
|
||||
|
||||
)
|
||||
tmbre = gr.Slider(
|
||||
value=Timbre,
|
||||
label="Timbre for formant shifting",
|
||||
minimum=-16.0,
|
||||
maximum=16.0,
|
||||
step=0.1,
|
||||
visible=bool(DoFormant),
|
||||
visible=False,
|
||||
interactive=True,
|
||||
)
|
||||
|
||||
formant_preset.change(fn=preset_apply, inputs=[formant_preset, qfrency, tmbre], outputs=[qfrency, tmbre])
|
||||
frmntbut = gr.Button("Apply", variant="primary", visible=bool(DoFormant))
|
||||
frmntbut = gr.Button("Apply", variant="primary", visible=False)
|
||||
formanting.change(fn=formant_enabled,inputs=[formanting,qfrency,tmbre,frmntbut,formant_preset,formant_refresh_button],outputs=[formanting,qfrency,tmbre,frmntbut,formant_preset,formant_refresh_button])
|
||||
frmntbut.click(fn=formant_apply,inputs=[qfrency, tmbre], outputs=[qfrency, tmbre])
|
||||
formant_refresh_button.click(fn=update_fshift_presets,inputs=[formant_preset, qfrency, tmbre],outputs=[formant_preset, qfrency, tmbre])
|
||||
@@ -2466,7 +2417,7 @@ with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
|
||||
f0method8.change(fn=whethercrepeornah, inputs=[f0method8], outputs=[extraction_crepe_hop_length])
|
||||
but2 = gr.Button(i18n("特征提取"), variant="primary")
|
||||
info2 = gr.Textbox(label=i18n("输出信息"), value="", max_lines=8, interactive=False)
|
||||
info2 = gr.Textbox(label=i18n("输出信息"), value="", max_lines=8)
|
||||
but2.click(
|
||||
extract_f0_feature,
|
||||
[gpus6, np7, f0method8, if_f0_3, exp_dir1, version19, extraction_crepe_hop_length],
|
||||
@@ -2501,7 +2452,8 @@ with gr.Blocks(theme=gr.themes.Soft(), title='Mangio-RVC-Web 💻') as app:
|
||||
interactive=True,
|
||||
)
|
||||
if_save_latest13 = gr.Checkbox(
|
||||
label="Whether to save only the latest .ckpt file to save hard drive space",
|
||||
label="Whether to save only the latest .ckpt file to save hard disk space",
|
||||
|
||||
value=True,
|
||||
interactive=True,
|
||||
)
|
||||
|
||||
43
my_utils.py
43
my_utils.py
@@ -5,17 +5,13 @@ import numpy as np
|
||||
# import praatio.praat_scripts
|
||||
import os
|
||||
|
||||
import sqlite3
|
||||
|
||||
|
||||
# from os.path import join
|
||||
|
||||
# praatEXE = join('.',os.path.abspath(os.getcwd()) + r"\Praat.exe")
|
||||
|
||||
|
||||
def load_audio(file, sr, DoFormant, Quefrency, Timbre):
|
||||
try:
|
||||
conn = sqlite3.connect('TEMP/db:cachedb?mode=memory&cache=shared', check_same_thread=False)
|
||||
cursor = conn.cursor()
|
||||
# https://github.com/openai/whisper/blob/main/whisper/audio.py#L26
|
||||
# This launches a subprocess to decode audio while down-mixing and resampling as necessary.
|
||||
# Requires the ffmpeg CLI and `ffmpeg-python` package to be installed.
|
||||
@@ -23,30 +19,30 @@ def load_audio(file, sr, DoFormant, Quefrency, Timbre):
|
||||
file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
|
||||
) # 防止小白拷路径头尾带了空格和"和回车
|
||||
file_formanted = file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
|
||||
cursor.execute("SELECT Quefrency, Timbre, DoFormant FROM formant_data")
|
||||
Quefrency, Timbre, DoFormant = cursor.fetchone()
|
||||
print(f"dofor={bool(DoFormant)} timbr={Timbre} quef={Quefrency}\n")
|
||||
if bool(DoFormant):
|
||||
with open("formanting.txt", "r") as fvf:
|
||||
content = fvf.readlines()
|
||||
if "True" in content[0].split("\n")[0]:
|
||||
# print("true")
|
||||
DoFormant = True
|
||||
Quefrency, Timbre = content[1].split("\n")[0], content[2].split("\n")[0]
|
||||
|
||||
else:
|
||||
# print("not true")
|
||||
DoFormant = False
|
||||
|
||||
if DoFormant:
|
||||
# os.system(f"stftpitchshift -i {file} -q {Quefrency} -t {Timbre} -o {file_formanted}")
|
||||
# print('stftpitchshift -i "%s" -p 1.0 --rms -w 128 -v 8 -q %s -t %s -o "%s"' % (file, Quefrency, Timbre, file_formanted))
|
||||
|
||||
if not file.endswith(".wav"):
|
||||
converting = (
|
||||
ffmpeg.input(file, threads = 0)
|
||||
.output(f"{file_formanted}.wav")
|
||||
.run(
|
||||
cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True
|
||||
)
|
||||
)
|
||||
print("formanting...")
|
||||
|
||||
os.system(
|
||||
'runtime\Scripts\stftpitchshift.exe -i "%s" -q %s -t %s -o "%sFORMANTED"'
|
||||
% (file_formanted, Quefrency, Timbre, file_formanted)
|
||||
'stftpitchshift -i "%s" -q %s -t %s -o "%sFORMANTED"'
|
||||
% (file, Quefrency, Timbre, file_formanted)
|
||||
)
|
||||
print("formanted!")
|
||||
# filepraat = (os.path.abspath(os.getcwd()) + '\\' + file).replace('/','\\')
|
||||
# file_formantedpraat = ('"' + os.path.abspath(os.getcwd()) + '/' + 'formanted'.join(file_formanted) + '"').replace('/','\\')
|
||||
|
||||
|
||||
out, _ = (
|
||||
ffmpeg.input("%sFORMANTED%s" % (file_formanted, ".wav"), threads=0)
|
||||
.output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr)
|
||||
@@ -56,8 +52,6 @@ def load_audio(file, sr, DoFormant, Quefrency, Timbre):
|
||||
)
|
||||
|
||||
os.remove("%sFORMANTED%s" % (file_formanted, ".wav"))
|
||||
os.remove(f"{file_formanted}.wav")
|
||||
|
||||
else:
|
||||
out, _ = (
|
||||
ffmpeg.input(file, threads=0)
|
||||
@@ -68,6 +62,5 @@ def load_audio(file, sr, DoFormant, Quefrency, Timbre):
|
||||
)
|
||||
except Exception as e:
|
||||
raise RuntimeError(f"Failed to load audio: {e}")
|
||||
|
||||
conn.close()
|
||||
|
||||
return np.frombuffer(out, np.float32).flatten()
|
||||
|
||||
@@ -33,8 +33,6 @@ from data_utils import (
|
||||
DistributedBucketSampler,
|
||||
)
|
||||
|
||||
import sqlite3
|
||||
|
||||
if hps.version == "v1":
|
||||
from lib.infer_pack.models import (
|
||||
SynthesizerTrnMs256NSFsid as RVC_Model_f0,
|
||||
@@ -256,7 +254,6 @@ def run(rank, n_gpus, hps):
|
||||
def train_and_evaluate(
|
||||
rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers, cache
|
||||
):
|
||||
|
||||
net_g, net_d = nets
|
||||
optim_g, optim_d = optims
|
||||
train_loader, eval_loader = loaders
|
||||
@@ -353,10 +350,6 @@ def train_and_evaluate(
|
||||
|
||||
# Run steps
|
||||
epoch_recorder = EpochRecorder()
|
||||
|
||||
conn = sqlite3.connect('TEMP/db:cachedb?mode=memory&cache=shared', check_same_thread=False)
|
||||
cursor = conn.cursor()
|
||||
|
||||
for batch_idx, info in data_iterator:
|
||||
# Data
|
||||
## Unpack
|
||||
@@ -575,33 +568,33 @@ def train_and_evaluate(
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
cursor.execute("SELECT stop FROM stop_train LIMIT 1")
|
||||
if bool(cursor.fetchone()) == True:
|
||||
logger.info("Stop Button was pressed. The program is closed.")
|
||||
if hasattr(net_g, "module"):
|
||||
ckpt = net_g.module.state_dict()
|
||||
else:
|
||||
ckpt = net_g.state_dict()
|
||||
logger.info(
|
||||
"saving final ckpt:%s"
|
||||
% (
|
||||
savee(
|
||||
ckpt,
|
||||
hps.sample_rate,
|
||||
hps.if_f0,
|
||||
hps.name,
|
||||
epoch,
|
||||
hps.version,
|
||||
hps,
|
||||
|
||||
with open("stop.txt", "r+") as tostop:
|
||||
content = tostop.read()
|
||||
if "stop" in content:
|
||||
logger.info("Stop Button was pressed. The program is closed.")
|
||||
if hasattr(net_g, "module"):
|
||||
ckpt = net_g.module.state_dict()
|
||||
else:
|
||||
ckpt = net_g.state_dict()
|
||||
logger.info(
|
||||
"saving final ckpt:%s"
|
||||
% (
|
||||
savee(
|
||||
ckpt,
|
||||
hps.sample_rate,
|
||||
hps.if_f0,
|
||||
hps.name,
|
||||
epoch,
|
||||
hps.version,
|
||||
hps,
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
sleep(1)
|
||||
cursor.execute("DELETE FROM stop_train")
|
||||
conn.commit()
|
||||
conn.close()
|
||||
os._exit(2333333)
|
||||
|
||||
tostop.truncate(0)
|
||||
tostop.writelines("not")
|
||||
os._exit(2333333)
|
||||
|
||||
if rank == 0:
|
||||
logger.info("====> Epoch: {} {}".format(epoch, epoch_recorder.record()))
|
||||
@@ -621,11 +614,7 @@ def train_and_evaluate(
|
||||
)
|
||||
)
|
||||
sleep(1)
|
||||
cursor.execute("DELETE FROM stop_train")
|
||||
conn.commit()
|
||||
conn.close()
|
||||
os._exit(2333333)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user