Spaces:
Running
Running
File size: 2,005 Bytes
039f896 280807d 039f896 280807d 039f896 996224c 039f896 996224c 039f896 280807d e6fe746 996224c e6fe746 996224c e6fe746 996224c e6fe746 996224c e6fe746 996224c e6fe746 280807d 039f896 e6fe746 039f896 996224c e6fe746 996224c 039f896 996224c e6fe746 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()
def synthesize_sync(article_url, text_input, language="en"):
return asyncio.run(synthesize(article_url, text_input, language))
async def synthesize(article_url, text_input, language):
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 (inglés) o español
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
with gr.Blocks(theme='gstaff/sketch') as demo:
gr.Markdown("# 🎙 Podcast Converter (Human Voices)")
with gr.Group():
text_url = gr.Textbox(label="Article URL (optional)", placeholder="https://...")
text_input = gr.Textbox(label="Or paste text directly", lines=5, placeholder="Type here...")
language = gr.Dropdown(["en", "es"], label="Language", value="en")
btn = gr.Button("Generate Podcast", variant="primary")
with gr.Row():
conv_display = gr.Textbox(label="Conversation", interactive=False, lines=10)
aud = gr.Audio(label="Podcast", interactive=False)
btn.click(
synthesize_sync,
inputs=[text_url, text_input, language],
outputs=[conv_display, aud]
)
demo.launch() |