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