File size: 4,426 Bytes
9791162
71dda67
3b4551e
9b8eb79
ed37553
9b8eb79
71dda67
16f1b93
 
ed37553
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11646d7
 
9b8eb79
11646d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b8eb79
3b4551e
 
9b8eb79
 
 
 
11646d7
 
9b8eb79
 
11646d7
 
 
 
 
9b8eb79
11646d7
 
 
 
 
 
 
 
9b8eb79
11646d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b8eb79
11646d7
 
9b8eb79
11646d7
 
9b8eb79
11646d7
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import gradio as gr
import os
import pytz
from datetime import datetime
import pandas as pd
import plotly.express as px

from svc_inference import main

# データの作成
data = {
    'id': list(range(1, 57)),  # 1から56までの数字
    'x': [
        28, 25, 5, 12, 8, 2, 0, -20, -15, -12, -20, 8, -30, 25, 0, 0, 2, -25,
        -25, 20, 15, -2, 0, 15, -30, 15, 8, 28, -10, -22, 20, 20, 8, 20, 0,
        0, -8, -10, -32, 0, 0, -8, 2, -25, -32, -20, -18, -5, 15, -22, -25,
        -28, -30, 10, 25, 28
    ],
    'y': [
        0, -5, -15, -20, -18, -3, 8, 8, 12, 10, 10, -20, 6, -3, 12, -15, 12,
        17, 10, -8, -15, -22, 8, 15, 10, -15, -18, -10, 8, 5, -10, -8, -25,
        -5, -12, 12, 15, 6, 17, -12, -8, -8, 15, 17, 25, 4, 4, 0, 0, -20,
        12, 12, 15, -19, 0, 0
    ]
}

df = pd.DataFrame(data)

def create_plot():
    fig = px.scatter(df, x='x', y='y', text='id',
                    title='Interactive Numeric Scatter Plot')
    
    # マーカーのスタイルを設定(紫系の色に設定)
    fig.update_traces(
        marker=dict(
            size=10,
            color='#663399',  # 紫色
            line=dict(color='#4B0082', width=1)  # より暗い紫の境界線
        ),
        textposition='top center'
    )
    
    # レイアウトの設定
    fig.update_layout(
        height=600,
        width=800,
        clickmode='event+select',
        plot_bgcolor='#eeeeee',
        paper_bgcolor='white',
        xaxis=dict(
            showgrid=True,
            zeroline=True,
            range=[-35, 35]  # x軸の範囲を設定
        ),
        yaxis=dict(
            showgrid=True,
            zeroline=True,
            range=[-30, 30]  # y軸の範囲を設定
        )
    )
    
    return fig

def run_main(audio_file, shift, speaker_id):
    # 固定の引数を設定
    class Args:
        pass
    
    args = Args()
    args.config = "configs/base.yaml"
    args.model = "./vits_pretrain/sovits5.0.pretrain.pth"
    speaker_str = f"{speaker_id:04d}"
    args.spk = f"./configs/singers/singer{speaker_str}.npy"
    args.wave = audio_file
    print(audio_file)
    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

    # 現在時刻を取得してファイル名を生成
    jst = pytz.timezone('Asia/Tokyo')
    now = datetime.now(jst)
    date_str = now.strftime("%y%m%d")
    time_str = now.strftime("%H%M%S")
    output_filename = f"svc_id{speaker_str}_pitch{shift}_speed0_{date_str}_{time_str}.wav"

    try:
        main(args)
        os.rename("svc_out.wav", output_filename)  # ファイル名を変更
        return output_filename  # 新しいファイル名を返す
    except Exception as e:
        return None

# Gradio インターフェースの作成
with gr.Blocks() as demo:
    gr.Markdown("# SVC 音声変換システム")

    with gr.Row():
        with gr.Column(scale=1.15):
            plot = gr.Plot(value=create_plot())

        with gr.Column(scale=1):
            # 入力音声のアップロード
            input_audio = gr.Audio(
                label="変換したい音声をアップロード",
                type="filepath"  # ファイルパスとして取得
            )
            # Speaker ID の選択
            speaker_id = gr.Number(
                label="Speaker ID (1-56)",
                value=1,
                minimum=1,
                maximum=56,
                step=1
            )
            # Pitch シフトのスライダー
            shift = gr.Slider(
                minimum=-12,
                maximum=12,
                value=0,
                step=1,
                label="Pitch Shift(-12から+12の半音)"
            )
            # ボタン
            run_btn = gr.Button(value="音声変換を実行", variant="primary", size="lg")

    # 出力表示用
    output_audio = gr.Audio(label="変換後の音声")
    
    
    run_btn.click(
        fn=run_main,
        inputs=[input_audio, shift, speaker_id],
        outputs=[output_audio]
    )

# アプリケーションの起動
if __name__ == "__main__":
    demo.launch()