RealtimeTTS es una biblioteca de Python avanzada de texto a voz (TTS) en tiempo real, diseñada específicamente para aplicaciones en tiempo real que requieren baja latencia y salida de audio de alta calidad. Esta biblioteca puede convertir rápidamente flujos de texto en salidas de audio de alta calidad con una latencia mínima, lo que la hace ideal para construir asistentes de voz, sistemas de diálogo de IA y herramientas de accesibilidad.
Dirección del Proyecto: https://github.com/KoljaB/RealtimeTTS
RealtimeTTS soporta múltiples motores TTS, ofreciendo una amplia gama de opciones:
pip install -U realtimetts[all]
Puede seleccionar el soporte de motor específico según sea necesario:
# Solo TTS del sistema
pip install realtimetts[system]
# Soporte de Azure
pip install realtimetts[azure]
# Combinación de múltiples motores
pip install realtimetts[azure,elevenlabs,openai]
all
: Instalación completa, soporta todos los motores.system
: TTS del sistema local (pyttsx3).azure
: Soporte del servicio de voz de Azure.elevenlabs
: Integración de la API de ElevenLabs.openai
: Servicio TTS de OpenAI.gtts
: Texto a voz de Google.edge
: TTS de Microsoft Edge.coqui
: Motor Coqui TTS.minimal
: Solo el paquete central (para el desarrollo de motores personalizados).play_async()
soporta la reproducción no bloqueante.play()
se utiliza para la reproducción bloqueante.Proporciona una rica colección de funciones de retrollamada para monitorear y controlar:
on_text_stream_start()
: Se activa cuando comienza el flujo de texto.on_text_stream_stop()
: Se activa cuando finaliza el flujo de texto.on_audio_stream_start()
: Se activa cuando comienza la reproducción de audio.on_audio_stream_stop()
: Se activa cuando finaliza la reproducción de audio.on_character()
: Se activa cuando se procesa cada carácter.on_word()
: Sincronización de tiempo a nivel de palabra (soporta los motores Azure y Kokoro).from RealtimeTTS import TextToAudioStream, SystemEngine
# Crear motor y flujo
engine = SystemEngine()
stream = TextToAudioStream(engine)
# Introducir texto y reproducir
stream.feed("¡Hola mundo! ¿Cómo estás hoy?")
stream.play_async()
# Procesar cadena
stream.feed("Hola, esta es una frase.")
# Procesar generador (adecuado para salida LLM)
def write(prompt: str):
for chunk in openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
stream=True
):
if (text_chunk := chunk["choices"][0]["delta"].get("content")) is not None:
yield text_chunk
text_stream = write("Un discurso relajante de tres frases.")
stream.feed(text_stream)
# Procesar iterador de caracteres
char_iterator = iter("Transmitiendo este carácter por carácter.")
stream.feed(char_iterator)
# Reproducción asíncrona
stream.play_async()
while stream.is_playing():
time.sleep(0.1)
# Reproducción síncrona
stream.play()
# Operaciones de control
stream.pause() # Pausa
stream.resume() # Reanuda
stream.stop() # Detiene
stream = TextToAudioStream(
engine=engine, # Motor TTS
on_text_stream_start=callback, # Retrollamada al inicio del flujo de texto
on_audio_stream_start=callback, # Retrollamada al inicio del flujo de audio
output_device_index=None, # Dispositivo de salida de audio
tokenizer="nltk", # Selección de tokenizador
language="en", # Código de idioma
muted=False, # Si está silenciado
level=logging.WARNING # Nivel de registro
)
stream.play(
fast_sentence_fragment=True, # Procesamiento rápido de fragmentos de frases
buffer_threshold_seconds=0.0, # Umbral de búfer
minimum_sentence_length=10, # Longitud mínima de la frase
log_synthesized_text=False, # Registrar texto sintetizado
reset_generated_text=True, # Restablecer texto generado
output_wavfile=None, # Guardar en archivo WAV
on_sentence_synthesized=callback, # Retrollamada al finalizar la síntesis de la frase
before_sentence_synthesized=callback, # Retrollamada antes de la síntesis de la frase
on_audio_chunk=callback # Retrollamada cuando el fragmento de audio está listo
)
from RealtimeTTS import OpenAIEngine
engine = OpenAIEngine(
api_key="your-api-key", # O establecer la variable de entorno OPENAI_API_KEY
voice="alloy", # Opcional: alloy, echo, fable, onyx, nova, shimmer
model="tts-1" # O tts-1-hd
)
from RealtimeTTS import AzureEngine
engine = AzureEngine(
speech_key="your-speech-key", # O establecer la variable de entorno AZURE_SPEECH_KEY
service_region="your-region", # Por ejemplo: "eastus"
voice_name="en-US-AriaNeural" # Nombre de la voz de Azure
)
from RealtimeTTS import CoquiEngine
engine = CoquiEngine(
voice="path/to/voice/sample.wav", # Archivo fuente de clonación de voz
language="en" # Código de idioma
)
El proyecto proporciona una rica colección de ejemplos de prueba:
simple_test.py
: Demostración básica de "Hola Mundo".complex_test.py
: Demostración de funciones completas.coqui_test.py
: Prueba del motor Coqui TTS local.translator.py
: Traducción multilingüe en tiempo real (requiere la instalación de openai realtimestt
).openai_voice_interface.py
: Interfaz de la API de OpenAI activada por voz.advanced_talk.py
: Sistema de diálogo avanzado.minimalistic_talkbot.py
: Chatbot simple de 20 líneas de código.test_callbacks.py
: Funciones de retrollamada y pruebas de latencia.Para obtener un mejor rendimiento, especialmente al usar motores neuronales locales, se recomienda instalar el soporte de CUDA:
# CUDA 11.8
pip install torch==2.5.1+cu118 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.X
pip install torch==2.5.1+cu121 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
RealtimeTTS es parte de un ecosistema más grande:
El proyecto en sí es de código abierto, pero es importante tener en cuenta las restricciones de licencia de cada motor:
RealtimeTTS es una biblioteca de texto a voz en tiempo real potente y bien diseñada, adecuada para aplicaciones modernas que requieren síntesis de voz de alta calidad y baja latencia. Su soporte multi-motor, sus robustos mecanismos de manejo de errores y sus ricas opciones de configuración la convierten en una opción ideal para construir aplicaciones de voz de nivel profesional. Ya sea para proyectos personales o aplicaciones de nivel empresarial, RealtimeTTS puede proporcionar una solución fiable y eficiente.