import streamlit as st import pandas as pd import numpy as np import matplotlib.pyplot as plt import json import tempfile import shutil import requests from pathlib import Path temp_dir = tempfile.mkdtemp() global ckpt_temp_file global audio_temp_file global config_temp_file ################################################### from utils.hparams import hparams from preprocessing.data_gen_utils import get_pitch_parselmouth,get_pitch_crepe import numpy as np import matplotlib.pyplot as plt import IPython.display as ipd import utils import librosa import torchcrepe from infer import * import logging from infer_tools.infer_tool import * import io clip_completed = False def render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title): logging.getLogger('numba').setLevel(logging.WARNING) title = int(title) project_name = "Unnamed" model_path = ckpt_temp_file config_path= config_temp_file hubert_gpu=True svc_model = Svc(project_name,config_path,hubert_gpu, model_path) print('model loaded') wav_fn = audio_temp_file demoaudio, sr = librosa.load(wav_fn) key = title # 音高调整,支持正负(半音) # 加速倍数 pndm_speedup = 20 wav_gen='queeeeee.wav'#直接改后缀可以保存不同格式音频,如flac可无损压缩 # Show the spinner and run the run_clip function inside the 'with' block with st.spinner("Rendering Audio..."): 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) clip_completed = True if clip_completed: # If the 'run_clip' function has completed, use the st.audio function to show an audio player for the file stored in the 'wav_gen' variable st.audio(wav_gen) ####################################################### st.set_page_config( page_title="DiffSVC Render", page_icon="🧊", initial_sidebar_state="expanded", ) ############ st.title('DIFF-SVC Render') ###CKPT LOADER # File uploader ckpt = st.file_uploader("Choose your CKPT", type= 'ckpt') # Check if user uploaded a CKPT file if ckpt is not None: #TEMP FUNCTION with tempfile.NamedTemporaryFile(mode="wb", suffix='.ckpt', delete=False) as temp: # Get the file contents as bytes bytes_data = ckpt.getvalue() # Write the bytes to the temporary file temp.write(bytes_data) ckpt_temp_file = temp.name # Print the temporary file name print(temp.name) # Display the file path if "ckpt_temp_file" in locals(): st.success("File saved to: {}".format(ckpt_temp_file)) # File uploader config = st.file_uploader("Choose your config", type= 'yaml') # Check if user uploaded a config file if config is not None: #TEMP FUNCTION with tempfile.NamedTemporaryFile(mode="wb", suffix='.yaml', delete=False) as temp: # Get the file contents as bytes bytes_data = config.getvalue() # Write the bytes to the temporary file temp.write(bytes_data) config_temp_file = temp.name # Print the temporary file name print(temp.name) # Display the file path if "config_temp_file" in locals(): st.success("File saved to: {}".format(config_temp_file)) # File uploader audio = st.file_uploader("Choose your audio", type=["wav", "mp3"]) # Check if user uploaded an audio file if audio is not None: #TEMP FUNCTION with tempfile.NamedTemporaryFile(mode="wb", suffix='.wav', delete=False) as temp: # Get the file contents as bytes bytes_data = audio.getvalue() # Write the bytes to the temporary file temp.write(bytes_data) audio_temp_file = temp.name # Print the temporary file name print(temp.name) # Display the file path if "audio_temp_file" in locals(): st.success("File saved to: {}".format(audio_temp_file)) # Add a text input for the title with a default value of 0 title = st.text_input("Key", value="0") # Add a button to start the rendering process if st.button("Render audio"): render_audio(ckpt_temp_file, config_temp_file, audio_temp_file, title)