Spaces:
Running
Running
File size: 1,946 Bytes
039f896 280807d 039f896 280807d 039f896 11706ee 996224c 039f896 280807d 11706ee 996224c e6fe746 996224c e6fe746 996224c 11706ee 996224c 11706ee 996224c 11706ee 280807d 039f896 11706ee 039f896 e6fe746 039f896 11706ee 039f896 11706ee 039f896 996224c 039f896 996224c |
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 |
import gradio as gr
import os
import asyncio
from conver import ConversationConfig, URLToAudioConverter
from dotenv import load_dotenv
load_dotenv()
async def synthesize(article_url, text_input, language="en"):
if not article_url and not text_input:
return "Error: Ingresa una URL o texto", None
try:
config = ConversationConfig()
converter = URLToAudioConverter(config, llm_api_key=os.environ.get("TOGETHER_API_KEY"))
# Voces humanizadas
voices = {
"en": ("en-US-AvaMultilingualNeural", "en-US-AndrewMultilingualNeural"),
"es": ("es-ES-AlvaroNeural", "es-ES-ElviraNeural")
}
voice1, voice2 = voices.get(language, voices["en"])
if text_input:
output_file, conversation = await converter.text_to_audio(text_input, voice1, voice2)
else:
output_file, conversation = await converter.url_to_audio(article_url, voice1, voice2)
return conversation, output_file
except Exception as e:
return f"Error: {str(e)}", None
def synthesize_sync(article_url, text_input, language):
return asyncio.run(synthesize(article_url, text_input, language))
with gr.Blocks(theme='gstaff/sketch') as demo:
gr.Markdown("# 🎙 Podcast Converter (Human Voices)")
with gr.Group():
text_url = gr.Textbox(label="URL (opcional)", placeholder="https://...")
text_input = gr.Textbox(label="O texto directo", lines=5)
language = gr.Dropdown(["en", "es"], label="Idioma", value="en")
btn = gr.Button("Generar Podcast", variant="primary")
with gr.Row():
conv_display = gr.Textbox(label="Conversación", interactive=False, lines=10)
aud = gr.Audio(label="Audio Generado", interactive=False)
btn.click(
synthesize_sync,
inputs=[text_url, text_input, language],
outputs=[conv_display, aud]
)
demo.launch() |