File size: 2,600 Bytes
2f9ec6c
 
 
 
1f673e5
2f9ec6c
 
 
 
 
 
 
29bf2a5
2f9ec6c
889bf3d
 
 
 
 
1f673e5
 
508223d
1f673e5
 
0b1ec24
889bf3d
 
1f673e5
 
889bf3d
 
 
 
 
1f673e5
889bf3d
 
29bf2a5
1f673e5
2f9ec6c
 
 
29bf2a5
2f9ec6c
 
 
 
 
29bf2a5
2f9ec6c
 
 
 
 
 
29bf2a5
2f9ec6c
 
 
 
29bf2a5
2f9ec6c
 
 
 
 
 
 
 
889bf3d
2f9ec6c
 
29bf2a5
2f9ec6c
 
 
29bf2a5
 
 
 
 
 
 
2f9ec6c
 
 
29bf2a5
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
import gradio as gr
import requests
import os
from dotenv import load_dotenv
from datetime import datetime, timedelta

# Cargar variables de entorno desde el archivo .env
load_dotenv()

# Constantes para el script
CHUNK_SIZE = 1024  # Tama帽o de los chunks para leer/escribir a la vez
XI_API_KEY = os.getenv("XI_API_KEY")  # Tu clave API para autenticaci贸n
VOICE_ID = os.getenv("VOICE_ID")      # ID del modelo de voz a utilizar

# Diccionario para almacenar la informaci贸n de uso
usage_data = {
    'message_count': 0,
    'last_reset': datetime.now()
}

# Configuraci贸n de l铆mites
MESSAGE_LIMIT = 145
TIME_LIMIT = timedelta(hours=2)

def text_to_speech(text, style):
    global usage_data
    current_time = datetime.now()

    # Resetear el contador si ha pasado el tiempo l铆mite
    if current_time - usage_data['last_reset'] > TIME_LIMIT:
        usage_data = {
            'message_count': 0,
            'last_reset': current_time
        }

    # Verificar si se ha alcanzado el l铆mite de mensajes
    if usage_data['message_count'] >= MESSAGE_LIMIT:
        return None  # Limite alcanzado, no se produce audio

    # URL para la solicitud de la API de Text-to-Speech
    tts_url = f"https://api.elevenlabs.io/v1/text-to-speech/{VOICE_ID}/stream"

    # Encabezados para la solicitud de la API
    headers = {
        "Accept": "application/json",
        "xi-api-key": XI_API_KEY
    }

    # Datos de carga 煤til para la solicitud de la API
    data = {
        "text": text,
        "model_id": "eleven_multilingual_v2",
        "voice_settings": {
            "stability": 0.5,
            "similarity_boost": 0.8,
            "style": style,
            "use_speaker_boost": True
        }
    }

    # Realizar la solicitud POST
    response = requests.post(tts_url, headers=headers, json=data, stream=True)

    # Verificar si la solicitud fue exitosa
    if response.ok:
        output_path = "output.mp3"
        with open(output_path, "wb") as f:
            for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
                f.write(chunk)
        usage_data['message_count'] += 1
        return output_path
    else:
        return None  # Si falla, tampoco generes audio

iface = gr.Interface(
    fn=text_to_speech,
    inputs=[
        gr.Textbox(label="Texto"),
        gr.Slider(minimum=0, maximum=1, step=0.1, label="Style")
    ],
    outputs=gr.Audio(type="filepath"),
    title="Text to Speech ElevenLabs",
    description="Convierte texto a voz usando ElevenLabs. Elige el 'Style' con el slider."
)

if __name__ == "__main__":
    iface.launch(share=True)