Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan | |
| import torch | |
| import numpy as np | |
| from scipy.io.wavfile import write | |
| import librosa | |
| # تحميل النماذج والمُعالج | |
| processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts") | |
| model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts") | |
| vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan") | |
| LANGUAGES = {"English": "en", "French": "fr", "Spanish": "es"} | |
| def generate_speaker_embedding(speaker_type): | |
| """توليد تعبيرات الصوت بناءً على نوع الصوت (ذكر أو أنثى).""" | |
| base_embedding = torch.randn(1, 512) | |
| if speaker_type == "Female": | |
| return base_embedding * 0.8 | |
| return base_embedding * 1.2 | |
| def adjust_speed(audio, speed): | |
| """تعديل سرعة الصوت باستخدام مكتبة librosa.""" | |
| return librosa.effects.time_stretch(audio, speed) | |
| def text_to_speech(text, language, speaker_type, speed): | |
| """تحويل النص إلى صوت.""" | |
| try: | |
| # توليد تعبيرات الصوت بناءً على نوع المتحدث | |
| speaker_embeddings = generate_speaker_embedding(speaker_type) | |
| # معالجة النص | |
| inputs = processor(text=text, return_tensors="pt") | |
| # توليد الصوت | |
| with torch.no_grad(): # تحسين إدارة الموارد | |
| generated_speech = model.generate_speech( | |
| inputs["input_ids"], | |
| speaker_embeddings, | |
| vocoder=vocoder | |
| ).cpu().numpy() | |
| # ضبط سرعة الصوت | |
| adjusted_speech = adjust_speed(generated_speech, speed) | |
| # حفظ الصوت كملف WAV | |
| output_file = "output.wav" | |
| write(output_file, 24000, (adjusted_speech * 32767).astype(np.int16)) | |
| return output_file | |
| except Exception as e: | |
| print(f"Error: {e}") | |
| return None | |
| # إنشاء واجهة Gradio | |
| def create_interface(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 🎙️ Multilingual Text-to-Speech") | |
| with gr.Row(): | |
| with gr.Column(): | |
| text_input = gr.Textbox(label="Enter Text", placeholder="Type your text here...", lines=5) | |
| language = gr.Dropdown(choices=list(LANGUAGES.keys()), value="English", label="Language") | |
| speaker = gr.Radio(choices=["Male", "Female"], value="Male", label="Speaker Gender") | |
| speed = gr.Slider(minimum=0.5, maximum=2.0, value=1.0, step=0.1, label="Speech Speed") | |
| submit_btn = gr.Button("Generate Speech") | |
| with gr.Column(): | |
| audio_output = gr.Audio(label="Generated Speech", type="filepath") | |
| submit_btn.click( | |
| fn=text_to_speech, | |
| inputs=[text_input, language, speaker, speed], | |
| outputs=audio_output | |
| ) | |
| gr.Markdown(""" | |
| ### Features: | |
| - Multilingual support (English, French, Spanish) | |
| - Male and Female voice options | |
| - Adjustable speech speed | |
| - High-quality, natural-sounding voices | |
| """) | |
| return demo | |
| # تشغيل التطبيق | |
| demo = create_interface() | |
| demo.launch(server_name="0.0.0.0") | |