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()