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") | |