File size: 2,941 Bytes
517bbae
dce4caf
a835194
dce4caf
 
a835194
b28f1ff
dce4caf
 
 
 
 
2c54faa
cf8620a
 
2c54faa
 
 
 
 
 
 
 
 
cf8620a
dce4caf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cf8620a
dce4caf
 
 
 
 
cf8620a
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
default_dir = "./default"
reference_files = [
    ("四国めたん", "sikokumetan"),
]

gallery_items = [[os.path.join(default_dir, f"{filename}.webp"), name] for name, filename in reference_files]
default_reference = os.path.join(default_dir, f"{reference_files[0][1]}.mp3")

description = ("Zero-shot音声変換モデル(学習不要)。ローカルでの利用方法は[GitHubリポジトリ](https://github.com/Plachtaa/seed-vc)をご覧ください。"
               "参考音声が25秒を超える場合、自動的に25秒にクリップされます。"
               "また、元音声と参考音声の合計時間が30秒を超える場合、元音声は分割処理されます。")

# ギャラリーで選択された音声を `voice_conversion` に渡すプロキシ関数
def proxy_voice_conversion(source, selected_gallery_item, diffusion_steps, length_adjust, inference_cfg_rate, f0_condition, auto_f0_adjust, pitch_shift):
    reference_file = os.path.join(default_dir, f"{selected_gallery_item}.mp3")

    # `voice_conversion` はジェネレーターなのでリスト化して2つの出力を明示的に取得
    outputs = list(voice_conversion(source, reference_file, diffusion_steps, length_adjust, inference_cfg_rate, f0_condition, auto_f0_adjust, pitch_shift))

    # 出力数が2つ未満ならエラー回避のため None を補填
    while len(outputs) < 2:
        outputs.append(None)

    return outputs[0], outputs[1]  # 2つのオーディオファイルを返す

inputs = [
    gr.Audio(type="filepath", label="元音声"),
    gr.Gallery(label="参照音声を選択", value=gallery_items, columns=5, interactive=True),
    gr.Slider(minimum=1, maximum=200, value=10, step=1, label="拡散ステップ数", info="デフォルトは10、50~100が最適な品質"),
    gr.Slider(minimum=0.5, maximum=2.0, step=0.1, value=1.0, label="長さ調整", info="1.0未満で速度を上げ、1.0以上で速度を遅くします"),
    gr.Slider(minimum=0.0, maximum=1.0, step=0.1, value=0.7, label="推論CFG率", info="わずかな影響があります"),
    gr.Checkbox(label="F0条件付きモデルを使用", value=False, info="歌声変換には必須です"),
    gr.Checkbox(label="F0自動調整", value=True, info="F0をおおよそ調整して目標音声に合わせます。F0条件付きモデル使用時にのみ有効です"),
    gr.Slider(label='音程変換', minimum=-24, maximum=24, step=1, value=0, info="半音単位の音程変換。F0条件付きモデル使用時にのみ有効です"),
]

outputs = [
    gr.Audio(label="ストリーム出力音声", streaming=True, format='mp3'),
    gr.Audio(label="完全出力音声", streaming=False, format='wav')
]

gr.Interface(
    fn=proxy_voice_conversion,
    description=description,
    inputs=inputs,
    outputs=outputs,
    title="Seed Voice Conversion with Reference Gallery",
    cache_examples=False,
).launch()