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