Spaces:
Running
on
Zero
Running
on
Zero
import spaces | |
import tempfile | |
import gradio as gr | |
from f5_tts.api import F5TTS # f5_tts'in kurulu ve erişilebilir olduğunu varsayıyoruz | |
from huggingface_hub import hf_hub_download | |
import os | |
# Kullanılabilir model varyantlarını tanımla | |
VARIANTS = ["orkhon_tts"] | |
models = {} | |
# TTS modellerini yükle | |
# Bu döngü, VARIANTS listesini (şu anda sadece "orkhon_tts") yineler | |
# ve karşılık gelen F5TTS modelini yükler. | |
# Hugging Face Hub'dan model kontrol noktasını ve kelime dağarcığı dosyasını almak için | |
# hf_hub_download kullanır. | |
# Model özelse kimlik doğrulama için HF_TOKEN ortam değişkeni kullanılır. | |
for variant in VARIANTS: | |
models[variant] = F5TTS( | |
ckpt_file=hf_hub_download("hcsolakoglu/Orkhon-TTS", f"{variant}.pt", token=os.getenv("HF_TOKEN")), | |
vocab_file=hf_hub_download("hcsolakoglu/Orkhon-TTS", "vocab.txt", token=os.getenv("HF_TOKEN")) | |
) | |
# Bu fonksiyonun Hugging Face Spaces'ta varsa GPU'da çalışması gerektiğini belirten dekoratör | |
def generate(text, ref_audio, variant, progress=gr.Progress()): | |
""" | |
Seçilen F5TTS model varyantını kullanarak metinden konuşma üretir. | |
Args: | |
text (str): Sentezlenecek giriş metni. | |
ref_audio (str): Ses klonlama için referans sesin dosya yolu. | |
variant (str): Kullanılacak TTS model varyantı (örn. "orkhon_tts"). | |
progress (gradio.Progress, optional): Gradio ilerleme izleyicisi. Varsayılan gr.Progress(). | |
Returns: | |
str: Üretilen WAV ses dosyasının dosya yolu. | |
""" | |
# Seçilen varyant için F5TTS API örneğini al | |
api = models[variant] | |
# Üretilen sesi kaydetmek için geçici bir dosya oluştur | |
# delete=False önemlidir çünkü Gradio'nun bu dosyaya fonksiyon döndükten sonra erişmesi gerekir. | |
# Gradio geçici dosyaların temizlenmesini halledecektir. | |
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f: | |
# TTS çıkarımını gerçekleştir | |
api.infer( | |
ref_file=ref_audio, # Referans sesin yolu | |
ref_text="", # Referans metin (ASR kullanılırsa veya model tarafından gerekmiyorsa boş olabilir) | |
gen_text=text, # Konuşma üretilecek metin | |
progress=progress, # İlerleme izleyicisini API'ye ilet | |
file_wave=f.name, # Çıktı WAV dosyasını kaydetme yolu | |
nfe_step=64 # nfe_step değerini maksimuma (64) ayarla | |
) | |
print(f"Üretilen ses şuraya kaydedildi: {f.name}") # Geçici dosyanın yolunu günlüğe kaydet | |
return f.name # Üretilen ses dosyasının yolunu döndür | |
# Gradio arayüzünü oluştur | |
with gr.Blocks() as demo: | |
# Başlık ve açıklama için Markdown | |
gr.Markdown("# Demo for Orkhon-TTS\n\nTry out [Orkhon-TTS](https://huggingface.co/hcsolakoglu/Orkhon-TTS)") | |
# Giriş bileşenleri | |
textbox = gr.Textbox(label="Sentezlenecek Metin") | |
audio = gr.Audio(label="Referans Ses (ses klonlama için)", type="filepath") | |
variant_radio = gr.Radio(choices=VARIANTS, value=VARIANTS[0], label="Model Varyantını Seçin") | |
# Üretimi tetikleme düğmesi | |
btn = gr.Button("Konuşma Üret", variant="primary") | |
# Çıkış bileşeni | |
output_audio = gr.Audio(label="Sentezlenmiş Konuşma Çıktısı", type="filepath") | |
# Düğme için tıklama eylemini tanımla | |
# Düğmeye tıklandığında, 'generate' fonksiyonunu | |
# 'textbox', 'audio' ve 'variant_radio' değerleriyle giriş olarak çağır. | |
# 'generate' çıktısı 'output_audio' içinde görüntülenecektir. | |
btn.click(generate, [textbox, audio, variant_radio], outputs=[output_audio]) | |
# Birden fazla isteği işlemek için demoyu kuyruğa al ve başlat | |
demo.queue().launch() |