import gradio as gr
from themes import IndonesiaTheme
import gradio as gr
def create_interface(models, tts_voices, tts_func):
initial_md = """
# TTS-RVC-Tokoh Indonesia
Pembuktian algoritma **Retrieval-based Voice Conversion (RVC)** dan teknologi **Edge TTS** yang dapat membuat clone dari suara tokoh-tokoh penting di Indonesia.
**Perhatian:** Harap tidak menyalahgunakan teknologi ini.
"""
app = gr.Blocks(theme=IndonesiaTheme(), title="TTS-RVC-Tokoh Indonesia")
with app:
# Tambahkan banner di bagian atas
gr.HTML("""
""")
gr.Markdown(initial_md)
with gr.Row():
with gr.Column():
model_name = gr.Dropdown(
label="Model",
choices=models,
value=models[0],
)
f0_key_up = gr.Number(
label="Tune (+12 = 1 oktaf dari edge-tts, nilai terbaik tergantung pada model dan pembicara)",
value=2,
)
with gr.Column():
f0_method = gr.Radio(
label="Metode ekstraksi pitch (pm: sangat cepat, kualitas rendah, rmvpe: sedikit lambat, kualitas tinggi)",
choices=["pm", "rmvpe"], # harvest and crepe terlalu lambat
value="rmvpe",
interactive=True,
)
index_rate = gr.Slider(
minimum=0,
maximum=1,
label="Tingkat indeks",
value=0.5,
interactive=True,
)
protect0 = gr.Slider(
minimum=0,
maximum=0.5,
label="Perlindungan",
value=0.33,
step=0.01,
interactive=True,
)
with gr.Row():
with gr.Column():
tts_voice = gr.Dropdown(
label="Pembicara Edge-tts (format: bahasa-Negara-Nama-Jenis Kelamin), pastikan jenis kelamin cocok dengan model",
choices=tts_voices,
allow_custom_value=False,
value="id-ID-ArdiNeural-Male",
)
speed = gr.Slider(
minimum=-100,
maximum=100,
label="Kecepatan bicara (%)",
value=0,
step=10,
interactive=True,
)
tts_text = gr.Textbox(label="Teks Input", value="Konversi dari teks ke suara dalam bahasa Indonesia.")
with gr.Column():
but0 = gr.Button("✅ Konversi Suara", variant="primary")
info_text = gr.Textbox(label="Informasi Output")
with gr.Column():
edge_tts_output = gr.Audio(label="Suara Edge", type="filepath")
tts_output = gr.Audio(label="Hasil")
but0.click(
tts_func,
[
model_name,
speed,
tts_text,
tts_voice,
f0_key_up,
f0_method,
index_rate,
protect0,
],
[info_text, edge_tts_output, tts_output],
)
with gr.Row():
examples = gr.Examples(
examples_per_page=100,
examples=[
["Ini adalah demo percobaan menggunakan Bahasa Indonesia untuk pria.", "jokowi"],
["Ini adalah teks percobaan menggunakan Bahasa Indonesia pada wanita.", "prabowo"],
],
inputs=[tts_text, tts_voice],
)
# Tambahkan footer di bagian bawah
gr.HTML("""
""")
return app