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 = """
[ ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) ](https://github.com/elevenlabs/elevenlabs-python) [ ![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white) ](https://twitter.com/elevenlabsio) [ ![](https://dcbadge.vercel.app/api/server/elevenlabs) ](https://discord.gg/elevenlabs)
""" 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('[ ![ElevenLabs](https://user-images.githubusercontent.com/12028621/262629275-4f85c9cf-85b6-435e-ab50-5b8c7c4e9dd2.png) ](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)