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()