|
import streamlit as st |
|
import pandas as pd |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
import json |
|
import os |
|
import tempfile |
|
import shutil |
|
import requests |
|
from pathlib import Path |
|
temp_dir = os.path.expanduser("/~app") |
|
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 |
|
with tempfile.TemporaryDirectory(dir=os.path.expanduser("/~app")) as temp_dir: |
|
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, dir=temp_dir) 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="w", suffix='.yaml', delete=False, dir=temp_dir) 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)) |
|
|
|
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, dir=temp_dir) 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) |