File size: 12,092 Bytes
e4dccaf |
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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
import os
import subprocess
import shutil
from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm.notebook import tqdm
from pathlib import Path
import requests
def run_script():
def run_cmd(cmd):
process = subprocess.run(cmd, shell=True, check=True, text=True)
return process.stdout
# Change the current directory to /content/
os.chdir('/content/')
print("Changing dir to /content/")
# Your function to edit the file
def edit_file(file_path):
temp_file_path = "/tmp/temp_file.py"
changes_made = False
with open(file_path, "r") as file, open(temp_file_path, "w") as temp_file:
previous_line = ""
second_previous_line = ""
for line in file:
new_line = line.replace("value=160", "value=128")
if new_line != line:
print("Replaced 'value=160' with 'value=128'")
changes_made = True
line = new_line
new_line = line.replace("crepe hop length: 160", "crepe hop length: 128")
if new_line != line:
print("Replaced 'crepe hop length: 160' with 'crepe hop length: 128'")
changes_made = True
line = new_line
new_line = line.replace("value=0.88", "value=0.75")
if new_line != line:
print("Replaced 'value=0.88' with 'value=0.75'")
changes_made = True
line = new_line
if "label=i18n(\"输入源音量包络替换输出音量包络融合比例,越靠近1越使用输出包络\")" in previous_line and "value=1," in line:
new_line = line.replace("value=1,", "value=0.25,")
if new_line != line:
print("Replaced 'value=1,' with 'value=0.25,' based on the condition")
changes_made = True
line = new_line
if "label=i18n(\"总训练轮数total_epoch\")" in previous_line and "value=20," in line:
new_line = line.replace("value=20,", "value=500,")
if new_line != line:
print("Replaced 'value=20,' with 'value=500,' based on the condition for DEFAULT EPOCH")
changes_made = True
line = new_line
if 'choices=["pm", "harvest", "dio", "crepe", "crepe-tiny", "mangio-crepe", "mangio-crepe-tiny"], # Fork Feature. Add Crepe-Tiny' in previous_line:
if 'value="pm",' in line:
new_line = line.replace('value="pm",', 'value="mangio-crepe",')
if new_line != line:
print("Replaced 'value=\"pm\",' with 'value=\"mangio-crepe\",' based on the condition")
changes_made = True
line = new_line
new_line = line.replace('label=i18n("输入训练文件夹路径"), value="E:\\\\语音音频+标注\\\\米津玄师\\\\src"', 'label=i18n("输入训练文件夹路径"), value="/content/dataset/"')
if new_line != line:
print("Replaced 'label=i18n(\"输入训练文件夹路径\"), value=\"E:\\\\语音音频+标注\\\\米津玄师\\\\src\"' with 'label=i18n(\"输入训练文件夹路径\"), value=\"/content/dataset/\"'")
changes_made = True
line = new_line
if 'label=i18n("是否仅保存最新的ckpt文件以节省硬盘空间"),' in second_previous_line:
if 'value=i18n("否"),' in line:
new_line = line.replace('value=i18n("否"),', 'value=i18n("是"),')
if new_line != line:
print("Replaced 'value=i18n(\"否\"),' with 'value=i18n(\"是\"),' based on the condition for SAVE ONLY LATEST")
changes_made = True
line = new_line
if 'label=i18n("是否在每次保存时间点将最终小模型保存至weights文件夹"),' in second_previous_line:
if 'value=i18n("否"),' in line:
new_line = line.replace('value=i18n("否"),', 'value=i18n("是"),')
if new_line != line:
print("Replaced 'value=i18n(\"否\"),' with 'value=i18n(\"是\"),' based on the condition for SAVE SMALL WEIGHTS")
changes_made = True
line = new_line
temp_file.write(line)
second_previous_line = previous_line
previous_line = line
# After finished, we replace the original file with the temp one
import shutil
shutil.move(temp_file_path, file_path)
if changes_made:
print("Changes made and file saved successfully.")
else:
print("No changes were needed.")
# Define the repo path
repo_path = '/content/Applio-RVC-Fork'
def copy_all_files_in_directory(src_dir, dest_dir):
# Iterate over all files in source directory
for item in Path(src_dir).glob('*'):
if item.is_file():
# Copy each file to destination directory
shutil.copy(item, dest_dir)
else:
# If it's a directory, make a new directory in the destination and copy the files recursively
new_dest = Path(dest_dir) / item.name
new_dest.mkdir(exist_ok=True)
copy_all_files_in_directory(str(item), str(new_dest))
def clone_and_copy_repo(repo_path):
# New repository link
new_repo_link = "https://github.com/IAHispano/Applio-RVC-Fork/"
# Temporary path to clone the repository
temp_repo_path = "/content/temp_Applio-RVC-Fork"
# New folder name
new_folder_name = "Applio-RVC-Fork"
# Clone the latest code from the new repository to a temporary location
run_cmd(f"git clone {new_repo_link} {temp_repo_path}")
os.chdir(temp_repo_path)
run_cmd(f"git checkout 3fa4dad3d8961e5ca2522e9e12c0b4ddb71ad402")
run_cmd(f"git checkout f9e606c279cb49420597519b0a83b92be81e42e4")
run_cmd(f"git checkout 9e305588844c5442d58add1061b29beeca89d679")
run_cmd(f"git checkout bf92dc1eb54b4f28d6396a4d1820a25896cc9af8")
run_cmd(f"git checkout c3810e197d3cb98039973b2f723edf967ecd9e61")
run_cmd(f"git checkout a33159efd134c2413b0afe26a76b7dc87926d2de")
run_cmd(f"git checkout 24e251fb62c662e39ac5cf9253cc65deb9be94ec")
run_cmd(f"git checkout ad5667d3017e93232dba85969cddac1322ba2902")
run_cmd(f"git checkout ce9715392cf52dd5a0e18e00d1b5e408f08dbf27")
run_cmd(f"git checkout 7c7da3f2ac68f3bd8f3ad5ca5c700f18ab9f90eb")
run_cmd(f"git checkout 4ac395eab101955e8960b50d772c26f592161764")
run_cmd(f"git checkout b15b358702294c7375761584e5276c811ffab5e8")
run_cmd(f"git checkout 1501793dc490982db9aca84a50647764caa66e51")
run_cmd(f"git checkout 21f7faf57219c75e6ba837062350391a803e9ae2")
run_cmd(f"git checkout b5eb689fbc409b49f065a431817f822f554cebe7")
run_cmd(f"git checkout 7e02fae1ebf24cb151bf6cbe787d06734aa65862")
run_cmd(f"git checkout 6aea5ea18ed0b9a1e03fa5d268d6bc3c616672a9")
run_cmd(f"git checkout f0f9b25717e59116473fb42bd7f9252cfc32b398")
run_cmd(f"git checkout b394de424088a81fc081224bc27338a8651ad3b2")
run_cmd(f"git checkout f1999406a88b80c965d2082340f5ea2bfa9ab67a")
run_cmd(f"git checkout d98a0fa8dc715308dfc73eac5c553b69c6ee072b")
run_cmd(f"git checkout d73267a415fb0eba98477afa43ef71ffd82a7157")
run_cmd(f"git checkout 1a03d01356ae79179e1fb8d8915dc9cc79925742")
run_cmd(f"git checkout 81497bb3115e92c754300c9b3992df428886a3e9")
run_cmd(f"git checkout c5af1f8edcf79cb70f065c0110e279e78e48caf9")
run_cmd(f"git checkout cdb3c90109387fa4dfa92f53c3864c71170ffc77")
# Edit the file here, before copying
#edit_file(f"{temp_repo_path}/infer-web.py")
# Copy all files from the cloned repository to the existing path
copy_all_files_in_directory(temp_repo_path, repo_path)
print(f"Copying all {new_folder_name} files from GitHub.")
# Change working directory back to /content/
os.chdir('/content/')
print("Changed path back to /content/")
# Remove the temporary cloned repository
shutil.rmtree(temp_repo_path)
# Call the function
clone_and_copy_repo(repo_path)
# Download the credentials file for RVC archive sheet
os.makedirs('/content/Applio-RVC-Fork/stats/', exist_ok=True)
run_cmd("wget -q https://cdn.discordapp.com/attachments/945486970883285045/1114717554481569802/peppy-generator-388800-07722f17a188.json -O /content/Applio-RVC-Fork/stats/peppy-generator-388800-07722f17a188.json")
# Forcefully delete any existing torchcrepe dependencies downloaded from an earlier run just in case
shutil.rmtree('/content/Applio-RVC-Fork/torchcrepe', ignore_errors=True)
shutil.rmtree('/content/torchcrepe', ignore_errors=True)
# Download the torchcrepe folder from the maxrmorrison/torchcrepe repository
run_cmd("git clone https://github.com/maxrmorrison/torchcrepe.git")
shutil.move('/content/torchcrepe/torchcrepe', '/content/Applio-RVC-Fork/')
shutil.rmtree('/content/torchcrepe', ignore_errors=True) # Delete the torchcrepe repository folder
# Change the current directory to /content/Applio-RVC-Fork
os.chdir('/content/Applio-RVC-Fork')
os.makedirs('pretrained', exist_ok=True)
os.makedirs('uvr5_weights', exist_ok=True)
def download_file(url, filepath):
response = requests.get(url, stream=True)
response.raise_for_status()
with open(filepath, "wb") as file:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
file.write(chunk)
def download_pretrained_models():
pretrained_models = {
"pretrained": [
"D40k.pth",
"G40k.pth",
"f0D40k.pth",
"f0G40k.pth"
],
"pretrained_v2": [
"D40k.pth",
"G40k.pth",
"f0D40k.pth",
"f0G40k.pth",
"f0G48k.pth",
"f0D48k.pth"
],
"uvr5_weights": [
"HP2-人声vocals+非人声instrumentals.pth",
"HP5-主旋律人声vocals+其他instrumentals.pth",
"VR-DeEchoNormal.pth",
"VR-DeEchoDeReverb.pth",
"VR-DeEchoAggressive.pth",
"HP5_only_main_vocal.pth",
"HP3_all_vocals.pth",
"HP2_all_vocals.pth"
]
}
part2 = "I"
base_url = "https://huggingface.co/lj1995/VoiceConversionWebU" + part2 + "/resolve/main/"
base_path = "/content/Applio-RVC-Fork/"
base_pathm = base_path
# Calculate total number of files to download
total_files = sum(len(files) for files in pretrained_models.values()) + 1 # +1 for hubert_base.pt
with tqdm(total=total_files, desc="Downloading files") as pbar:
for folder, models in pretrained_models.items():
folder_path = os.path.join(base_path, folder)
os.makedirs(folder_path, exist_ok=True)
for model in models:
url = base_url + folder + "/" + model
filepath = os.path.join(folder_path, model)
download_file(url, filepath)
pbar.update()
# Download hubert_base.pt to the base path
hubert_url = base_url + "hubert_base.pt"
hubert_filepath = os.path.join(base_pathm, "hubert_base.pt")
download_file(hubert_url, hubert_filepath)
pbar.update()
def clone_repository(run_download):
with ThreadPoolExecutor(max_workers=2) as executor:
executor.submit(run_script)
if run_download:
executor.submit(download_pretrained_models)
|