Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -25,13 +25,14 @@ from infer import *
|
|
| 25 |
import logging
|
| 26 |
from infer_tools.infer_tool import *
|
| 27 |
import io
|
|
|
|
|
|
|
| 28 |
|
| 29 |
clip_completed = False
|
| 30 |
-
def render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title, title2):
|
| 31 |
logging.getLogger('numba').setLevel(logging.WARNING)
|
| 32 |
title = int(title)
|
| 33 |
title2 = int(title2)
|
| 34 |
-
|
| 35 |
project_name = "Unnamed"
|
| 36 |
model_path = ckpt_temp_file
|
| 37 |
config_path= config_temp_file
|
|
@@ -43,15 +44,33 @@ def render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title, title
|
|
| 43 |
key = title # 音高调整,支持正负(半音)
|
| 44 |
# 加速倍数
|
| 45 |
pndm_speedup = 20
|
| 46 |
-
wav_gen='
|
| 47 |
|
| 48 |
# Show the spinner and run the run_clip function inside the 'with' block
|
| 49 |
with st.spinner("Rendering Audio..."):
|
| 50 |
-
f0_tst, f0_pred, audio = run_clip(svc_model,file_path=wav_fn, key=key, acc=title2, use_crepe=
|
| 51 |
-
use_gt_mel=
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
clip_completed = True
|
| 53 |
if clip_completed:
|
| 54 |
-
|
| 55 |
st.audio(wav_gen)
|
| 56 |
|
| 57 |
#######################################################
|
|
@@ -61,11 +80,10 @@ st.set_page_config(
|
|
| 61 |
initial_sidebar_state="expanded",
|
| 62 |
)
|
| 63 |
############
|
| 64 |
-
st.
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
ckpt =
|
| 68 |
-
# Check if user uploaded a CKPT file
|
| 69 |
if ckpt is not None:
|
| 70 |
#TEMP FUNCTION
|
| 71 |
with tempfile.NamedTemporaryFile(mode="wb", suffix='.ckpt', delete=False) as temp:
|
|
@@ -80,8 +98,7 @@ if ckpt is not None:
|
|
| 80 |
if "ckpt_temp_file" in locals():
|
| 81 |
st.success("File saved to: {}".format(ckpt_temp_file))
|
| 82 |
# File uploader
|
| 83 |
-
config =
|
| 84 |
-
# Check if user uploaded a config file
|
| 85 |
if config is not None:
|
| 86 |
#TEMP FUNCTION
|
| 87 |
with tempfile.NamedTemporaryFile(mode="wb", suffix='.yaml', delete=False) as temp:
|
|
@@ -95,8 +112,8 @@ if config is not None:
|
|
| 95 |
# Display the file path
|
| 96 |
if "config_temp_file" in locals():
|
| 97 |
st.success("File saved to: {}".format(config_temp_file))
|
| 98 |
-
|
| 99 |
-
|
| 100 |
if audio is not None:
|
| 101 |
#EMP FUNCTION
|
| 102 |
with tempfile.NamedTemporaryFile(mode="wb", suffix='.wav', delete=False) as temp:
|
|
@@ -110,17 +127,25 @@ if audio is not None:
|
|
| 110 |
# Display the file path
|
| 111 |
if "audio_temp_file" in locals():
|
| 112 |
st.success("File saved to: {}".format(audio_temp_file))
|
| 113 |
-
|
| 114 |
-
title =
|
| 115 |
-
title2 =
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
#
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
#
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
import logging
|
| 26 |
from infer_tools.infer_tool import *
|
| 27 |
import io
|
| 28 |
+
import parselmouth
|
| 29 |
+
from parselmouth.praat import call
|
| 30 |
|
| 31 |
clip_completed = False
|
| 32 |
+
def render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title, title2, title3, choice, noise_step, use_mel_as_base):
|
| 33 |
logging.getLogger('numba').setLevel(logging.WARNING)
|
| 34 |
title = int(title)
|
| 35 |
title2 = int(title2)
|
|
|
|
| 36 |
project_name = "Unnamed"
|
| 37 |
model_path = ckpt_temp_file
|
| 38 |
config_path= config_temp_file
|
|
|
|
| 44 |
key = title # 音高调整,支持正负(半音)
|
| 45 |
# 加速倍数
|
| 46 |
pndm_speedup = 20
|
| 47 |
+
wav_gen='que.wav'
|
| 48 |
|
| 49 |
# Show the spinner and run the run_clip function inside the 'with' block
|
| 50 |
with st.spinner("Rendering Audio..."):
|
| 51 |
+
f0_tst, f0_pred, audio = run_clip(svc_model,file_path=wav_fn, key=key, acc=title2, use_crepe=choice, use_pe=False, thre=0.05,
|
| 52 |
+
use_gt_mel=use_mel_as_base, add_noise_step=noise_step,project_name=project_name,out_path=wav_gen)
|
| 53 |
+
##PRAAT
|
| 54 |
+
formant_shift_ratio_str = title3
|
| 55 |
+
formant_shift_ratio = float(formant_shift_ratio_str)
|
| 56 |
+
|
| 57 |
+
# If the formant shift ratio is not equal to 1.0, change the gender of the sound using parselmouth
|
| 58 |
+
if formant_shift_ratio != 1.0:
|
| 59 |
+
sound = parselmouth.Sound(wav_gen)
|
| 60 |
+
print(wav_gen)
|
| 61 |
+
sound.get_power()
|
| 62 |
+
sampling_rate = sound.sampling_frequency
|
| 63 |
+
print(sampling_rate)
|
| 64 |
+
resampled_sound = sound.resample(sampling_rate)
|
| 65 |
+
print(resampled_sound)
|
| 66 |
+
factor = formant_shift_ratio
|
| 67 |
+
print(factor)
|
| 68 |
+
manipulated_sound = call(sound, "Change gender", 75, 500, factor, 0, 1, 1)
|
| 69 |
+
print(manipulated_sound)
|
| 70 |
+
manipulated_sound.save("que.wav", "WAV")
|
| 71 |
+
print("Gender correct!")
|
| 72 |
clip_completed = True
|
| 73 |
if clip_completed:
|
|
|
|
| 74 |
st.audio(wav_gen)
|
| 75 |
|
| 76 |
#######################################################
|
|
|
|
| 80 |
initial_sidebar_state="expanded",
|
| 81 |
)
|
| 82 |
############
|
| 83 |
+
col1, col2 = st.columns(2)
|
| 84 |
+
col1.title('DIFF-SVC Render')
|
| 85 |
+
col2.title('Settings')
|
| 86 |
+
ckpt = col1.file_uploader("Choose your CKPT", type='ckpt')
|
|
|
|
| 87 |
if ckpt is not None:
|
| 88 |
#TEMP FUNCTION
|
| 89 |
with tempfile.NamedTemporaryFile(mode="wb", suffix='.ckpt', delete=False) as temp:
|
|
|
|
| 98 |
if "ckpt_temp_file" in locals():
|
| 99 |
st.success("File saved to: {}".format(ckpt_temp_file))
|
| 100 |
# File uploader
|
| 101 |
+
config = col1.file_uploader("Choose your config", type='yaml')
|
|
|
|
| 102 |
if config is not None:
|
| 103 |
#TEMP FUNCTION
|
| 104 |
with tempfile.NamedTemporaryFile(mode="wb", suffix='.yaml', delete=False) as temp:
|
|
|
|
| 112 |
# Display the file path
|
| 113 |
if "config_temp_file" in locals():
|
| 114 |
st.success("File saved to: {}".format(config_temp_file))
|
| 115 |
+
|
| 116 |
+
audio = col1.file_uploader("Choose your audio", type=["wav"])
|
| 117 |
if audio is not None:
|
| 118 |
#EMP FUNCTION
|
| 119 |
with tempfile.NamedTemporaryFile(mode="wb", suffix='.wav', delete=False) as temp:
|
|
|
|
| 127 |
# Display the file path
|
| 128 |
if "audio_temp_file" in locals():
|
| 129 |
st.success("File saved to: {}".format(audio_temp_file))
|
| 130 |
+
|
| 131 |
+
title = col2.number_input("Key", value=0, step=1, min_value=-12, max_value=12)
|
| 132 |
+
title2 = col2.number_input("Speedup", value=20, step=1, min_value=1, max_value=100)
|
| 133 |
+
title3 = col2.number_input("Gender Flag", value=1.00, step=0.01, min_value=0.70, max_value=1.30, help='Default is 1.0, it works by decimals, setting it at 1.05 will make your render sound more female-ish, setting it to 0.95 will make it sound more masculine, for example.')
|
| 134 |
+
choice = col2.checkbox('Use Crepe', value=False)
|
| 135 |
+
# Create checkbox for using Mel as Base
|
| 136 |
+
use_mel_as_base = col2.checkbox('Use Mel as Base', value=False, help='gt mel: Enabling this will use the input audio as a base and will unlock a new parameter, do not use this if you dont know what it does.')
|
| 137 |
+
noise_step = 600
|
| 138 |
+
# Show "Noise Step" input parameter when checkbox is checked
|
| 139 |
+
if use_mel_as_base:
|
| 140 |
+
noise_step = col2.number_input('Noise Step', value=600, min_value=1, max_value=1000, step=50)
|
| 141 |
+
else:
|
| 142 |
+
noise_step = 600
|
| 143 |
+
password = col2.text_input("Enter password", help='Hi,Zacgo')
|
| 144 |
+
correct_password = "Zacgo"
|
| 145 |
+
###
|
| 146 |
+
if st.button("Render audio"):
|
| 147 |
+
if password == "Zacgo":
|
| 148 |
+
render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title, title2, title3, noise_step, choice, use_mel_as_base)
|
| 149 |
+
|
| 150 |
+
else:
|
| 151 |
+
render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title, title2, title3, noise_step, choice, use_mel_as_base)
|