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) | |
description = """ | |
Here's a demonstration of the world's most advanced TTS systems, created by ElevenLabs. ๐ I wanted to experiment with this amazing technology for the Italian language ๐ฎ๐น, and I'm excited to share its capabilities with you! Eleven Multilingual V2 is a single foundational model supporting an impressive 28 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 to get fast access to long-form generation, voice cloning, API keys, and more! ๐ | |
""" | |
with gr.Blocks() as block: | |
gr.Markdown('[  ](https://elevenlabs.io)') | |
gr.Markdown(description) | |
input_text = gr.Textbox( | |
label="Input Text (250 characters max)", | |
lines=2, | |
value="Ciao, mi chiamo Sab, sono un ragazzo italiano appassionato di AI e nuove tecnologie!", | |
elem_id="input_text" | |
) | |
all_voices = voices() | |
input_voice = gr.Dropdown( | |
[ voice.name for voice in all_voices ], | |
value="Callum", | |
label="Voice", | |
elem_id="input_voice" | |
) | |
run_button = gr.Button( | |
value="Generate Voice", | |
) | |
out_audio = gr.Audio( | |
label="Generated Voice", | |
type="numpy", | |
elem_id="out_audio", | |
format="mp3" | |
) | |
inputs = [input_text, input_voice] | |
outputs = [out_audio] | |
run_button.click( | |
fn=generate_voice, | |
inputs=inputs, | |
outputs=outputs, | |
queue=True | |
) | |
block.launch(debug=False, show_error=True, share=True) |