Spaces:
Running
Running
import random | |
import gradio as gr | |
import numpy as np | |
from elevenlabs import voices, generate, set_api_key, UnauthenticatedRateLimitError | |
def pad_buffer(audio): | |
# Pad buffer to multiple of 2 bytes | |
buffer_size = len(audio) | |
element_size = np.dtype(np.int16).itemsize | |
if buffer_size % element_size != 0: | |
audio = audio + b'\0' * (element_size - (buffer_size % element_size)) | |
return audio | |
def generate_voice(text, voice_name): | |
try: | |
audio = generate( | |
text[:250], # Limit to 250 characters | |
voice=voice_name, | |
model="eleven_multilingual_v2" | |
) | |
return (44100, np.frombuffer(pad_buffer(audio), dtype=np.int16)) | |
except UnauthenticatedRateLimitError as e: | |
raise gr.Error("Thanks for trying out ElevenLabs TTS! You've reached the free tier limit. Please provide an API key to continue.") | |
except Exception as e: | |
raise gr.Error(e) | |
badges = """ | |
<div style="display: flex"> | |
<span style="margin-right: 5px"> | |
[  ](https://github.com/elevenlabs/elevenlabs-python) | |
</span> | |
<span style="margin-right: 5px"> | |
[  ](https://twitter.com/elevenlabsio) | |
</span> | |
<span> | |
[  ](https://discord.gg/elevenlabs) | |
</span> | |
</div> | |
""" | |
description = """ | |
A demo of the world's most advanced TTS systems, made by [ElevenLabs](https://elevenlabs.io). Eleven Multilingual v2 is a single foundational model supporting 28 languages languages including English, Chinese, Spanish, Hindi, Portuguese, French, German, Japanese, Arabic, Korean, Indonesian, Italian, Dutch, Turkish, Polish, Swedish, Filipino, Malay, Romanian, Ukrainian, Greek, Czech, Danish, Finnish, Bulgarian, Croatian, Slovak, and Tamil. Sign up on [ElevenLabs](https://elevenlabs.io) to get fast access, long-form generation, voice cloning, API keys, and more! | |
""" | |
with gr.Blocks() as block: | |
gr.Markdown('[  ](https://elevenlabs.io)') | |
gr.Markdown(badges) | |
gr.Markdown(description) | |
input_text = gr.Textbox( | |
label="Input Text (250 characters max)", | |
lines=2, | |
value="Hello! 你好! Hola! नमस्ते! Olá! Bonjour! Hallo! こんにちは! مرحبا! 안녕하세요! Halo! Ciao! Hallo! Merhaba! Cześć! Hej! Kamusta! Halo! Bună! Привіт! Γειά σας! Ahoj! Hej! Hei! Здравей! Pozdrav! Ahoj! வணக்கம்!", | |
elem_id="input_text" | |
) | |
all_voices = voices() | |
input_voice = gr.Dropdown( | |
[ voice.name for voice in all_voices ], | |
value="Bella", | |
label="Voice", | |
elem_id="input_voice" | |
) | |
run_button = gr.Button( | |
text="Generate Voice", | |
type="button" | |
) | |
out_audio = gr.Audio( | |
label="Generated Voice", | |
type="numpy", | |
elem_id="out_audio" | |
) | |
inputs = [input_text, input_voice] | |
outputs = [out_audio] | |
run_button.click( | |
fn=generate_voice, | |
inputs=inputs, | |
outputs=outputs, | |
queue=True | |
) | |
block.queue(concurrency_count=1).launch(debug=True) |