sovits-test / main.py
atsushieee's picture
Update main.py
3df32b6
raw
history blame
3.39 kB
import gradio as gr
import os
import requests
from tqdm import tqdm
from svc_inference import main
def check_and_download_model():
temp_dir = "/tmp"
model_path = os.path.join(temp_dir, "large-v2.pt")
if os.path.exists(model_path):
return f"モデルは既に存在します: {model_path}"
url = "https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt"
try:
response = requests.get(url, stream=True)
response.raise_for_status()
total_size = int(response.headers.get('content-length', 0))
with open(model_path, 'wb') as f, tqdm(
desc=model_path,
total=total_size,
unit='iB',
unit_scale=True,
unit_divisor=1024,
) as pbar:
for data in response.iter_content(chunk_size=1024):
size = f.write(data)
pbar.update(size)
return f"モデルのダウンロードが完了しました: {model_path}"
except Exception as e:
return f"エラーが発生しました: {e}"
def run_main(shift):
# 固定の引数を設定
class Args:
pass
args = Args()
args.config = "configs/base.yaml"
args.model = "./vits_pretrain/sovits5.0.pretrain.pth"
args.spk = "./configs/singers/singer0001.npy"
args.wave = "test.wav"
args.shift = shift
# オプショナルパラメータのデフォルト値設定
args.ppg = None
args.vec = None
args.pit = None
args.enable_retrieval = False
args.retrieval_index_prefix = ""
args.retrieval_ratio = 0.5
args.n_retrieval_vectors = 3
args.hubert_index_path = None
args.whisper_index_path = None
args.debug = False
try:
main(args)
return "処理が完了しました。", "svc_out.wav" # 音声ファイルのパスを返す
except Exception as e:
return f"エラーが発生しました: {str(e)}", None
# Gradio インターフェースの作成
with gr.Blocks() as demo:
gr.Markdown("# SVC 音声変換システム")
gr.Markdown("## 設定されているパラメータ")
gr.Markdown("""
- Config: configs/base.yaml
- Model: ./vits_pretrain/sovits5.0.pretrain.pth
- Speaker: ./configs/singers/singer0001.npy
- Input Wave: test.wav
""")
# 入力音声の表示
gr.Audio("test.wav", label="入力音声")
# Pitch シフトのスライダー
shift = gr.Slider(
minimum=-12,
maximum=12,
value=0,
step=1,
label="Pitch Shift(-12から+12の半音)"
)
# 出力表示用
output_text = gr.Text(label="処理結果")
output_audio = gr.Audio(label="変換後の音声")
# ボタン
with gr.Row():
check_btn = gr.Button(value="モデルを確認する", variant="secondary", size="lg")
run_btn = gr.Button(value="音声変換を実行", variant="primary", size="lg")
# イベント設定
check_btn.click(
fn=check_and_download_model,
outputs=output_text
)
run_btn.click(
fn=run_main,
inputs=[shift],
outputs=[output_text, output_audio]
)
# アプリケーションの起動
if __name__ == "__main__":
demo.launch()