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")) ) @spaces.GPU # 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()