File size: 4,860 Bytes
3b1f0f3 5bd7020 770a448 3b1f0f3 8a1ba2b 4306d26 8a1ba2b 770a448 8a1ba2b 8aa19f9 3b1f0f3 8aa19f9 518d9ff 3b1f0f3 319ac54 0584b7c ea2b509 824cf4a 261cefa 824cf4a 261cefa a005c5c 152850a a005c5c 8ae1144 824cf4a 8ae1144 a005c5c 6e98ca7 a005c5c 152850a 63af3f2 a005c5c 824cf4a 63af3f2 824cf4a 63af3f2 824cf4a ea2b509 152850a a005c5c 6e98ca7 63af3f2 a005c5c a1c99ef 8ae1144 a1c99ef 3b1f0f3 cbbd8a5 329ed02 d0f56c0 468a35c 329ed02 d0f56c0 468a35c 36b760b 329ed02 36b760b 468a35c 329ed02 468a35c cbbd8a5 518d9ff 84bfa6f 518d9ff 84bfa6f 518d9ff 3b1f0f3 518d9ff dce5f84 3b1f0f3 518d9ff 3b1f0f3 518d9ff 770a448 518d9ff 3b1f0f3 518d9ff 3b1f0f3 518d9ff 0ad3caf 3b1f0f3 518d9ff 770a448 3b1f0f3 518d9ff 3b1f0f3 518d9ff 3b1f0f3 518d9ff |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
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)
# Login function
def login(username, password):
if password == "pixio":
return True
else:
return False
badges = """
"""
menu = """
<style>
/* Existing styles */
.gradio-container-3-40-1 .prose a {
color: #ffffff!important;
text-decoration: auto!important;
}
.menu-bar {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #333;
padding: 10px;
color: white;
font-family: 'sans-serif';
}
.menu-bar a, .menu-bar a:visited {
color: white;
text-decoration: none;
}
.menu-icon {
font-size: 24px;
background-color: #ffffff;
border-radius: 50%;
padding: 5px;
}
.menu-items {
display: flex;
gap: 15px;
color: white;
}
.menu-item {
padding: 8px 16px;
background-color: #555;
border-radius: 4px;
transition: background-color 0.3s;
font-weight: bold;
font-size: 12px;
}
.menu-item:hover {
background-color: #777;
}
/* Responsive styles for mobile */
@media (max-width: 768px) {
.menu-item {
font-size: 12px; /* Shrink text size */
}
.menu-icon {
font-size: 18px; /* Shrink icon size */
}
}
</style>
<div class="menu-bar">
<a href="#" class="menu-icon">🎵</a>
<div class="menu-items">
<span class="menu-item"><a href="#">Dashboard</a></span>
<span class="menu-item"><a href="#">Premium</a></span>
<span class="menu-item"><a href="#">Account</a></span>
<span class="menu-item"><a href="#">Voices</a></span>
</div>
</div>
"""
description = """
<style>
.notification {
text-align: left; /* Left-align the text */
background-color: #ffffff; /* White Background */
color: #000; /* Black text */
padding: 20px; /* Padding */
margin: 20px; /* Margin */
margin-bottom: 40px; /* Additional space below the notification */
border: 2px solid #000000; /* Black border */
border-radius: 20px; /* Rounded corners */
font-size: 18px; /* Font size */
font-family: 'Arial', sans-serif; /* Font family */
box-shadow: 0 4px 8px 0 rgba(0,0,0,0.1); /* Subtle box shadow for depth */
}
</style>
<div class="notification">
Welcome to AI Tutor Text to Voice, single foundational model supporting 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.
</div>
"""
with gr.Blocks() as block:
gr.Markdown('')
gr.Markdown(menu)
gr.Markdown(badges)
gr.Markdown(description)
input_text = gr.Textbox(
label="Input Text (250 characters max)",
lines=2,
value="Hello! 你好! Hola! नमस्ते! Bonjour! こんにちは! مرحبا! 안녕하세요! Ciao! Cześć! Привіт! Γειά σας! Здравей! வணக்கம்!",
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",
format="mp3"
)
inputs = [input_text, input_voice]
outputs = [out_audio]
run_button.click(
fn=generate_voice,
inputs=inputs,
outputs=outputs,
queue=True
)
block.queue(concurrency_count=5).launch(debug=True, login=login) |