Log in to leave a comment
No posts yet
Al ver las facturas mensuales de ElevenLabs o OpenAI TTS, es inevitable suspirar. Para un desarrollador de juegos indie, los costos de las llamadas a la API son gastos fijos que asfixian el proyecto. Kokoro 82M es un modelo de código abierto con licencia Apache 2.0 que genera voces de nivel comercial en un entorno local. Al montar este modelo ligero de 82 millones de parámetros en su propia PC, ya no necesita estar a merced de los cambios en las políticas de servidores externos.
La mayor preocupación al ejecutar modelos locales es la caída de frames en el juego. Para evitar que la carga de la CPU durante la síntesis de voz afecte el rendimiento, es necesario controlar estrictamente los hilos de computación. Kokoro 82M sigue la estructura de StyleTTS 2, por lo que es más eficiente cuando se ejecuta con el motor ONNX Runtime.
SessionOptions de ONNX, limite el intra_op_num_threads a menos de la mitad de los núcleos totales. Para una CPU de 8 núcleos, asignar 2 a 4 es suficiente.enable_cpu_mem_arena para evitar la fragmentación de memoria. Esto elimina los micro-tirones (lag) que ocurren al generar audio en segundo plano.asyncio para enviar los datos al dispositivo de audio tan pronto como salga el primer bloque de datos.Con esta configuración, puede reducir el tiempo hasta el primer audio (TTFA) a menos de 0,5 segundos.
Por muy excelente que sea Kokoro 82M, si lee "API" como "api" de forma incorrecta o no procesa bien los símbolos como "10%", se rompe la inmersión. Dado que este modelo fue entrenado basándose en el Alfabeto Fonético Internacional (IPA), el proceso de normalización del texto de entrada es esencial.
En lugar de introducir el texto directamente, cree un diccionario de mapeo con expresiones regulares. r'\bAPI\b' debe convertirse en "e-pi-ai", y los números deben desglosarse en texto según el contexto. Especialmente para las reglas fonéticas específicas de cada idioma, se pueden utilizar librerías auxiliares como korean-text-normalizer (en el caso del coreano) para solucionar el problema. Esto puede ahorrar hasta 5 horas semanales que antes se gastaban editando archivos de audio manualmente.
No es necesario reconstruir todo el código del SDK de OpenAI que ya estaba usando. Al levantar un servidor ligero con FastAPI en el localhost, puede reemplazar la API de pago simplemente modificando una línea en la dirección del endpoint.
/v1/audio/speech y diséñela para recibir datos JSON con el estándar de OpenAI.INT8 de 92,4 MB. La velocidad de inferencia es más de 3 veces más rápida que el modelo normal, mientras que la diferencia de calidad de audio perceptible es mínima.pydub para devolverlos inmediatamente en formato .mp3 o .wav.De esta manera, puede mantener la base de código que dependía de servicios de pago mientras elimina por completo las cuotas de suscripción mensuales.
Los modelos ligeros tienen la limitación de que, al procesar oraciones largas de más de 500 caracteres a la vez, la pronunciación final puede distorsionarse o mezclarse con ruido mecánico. Para solucionar esto, las oraciones deben dividirse de manera inteligente.
Divida el texto basándose en puntos y comas, y luego utilice AudioSegment.silent para insertar forzosamente silencios de 200 a 500 ms entre oraciones. Simular el ciclo de respiración humana hace que la falta de naturalidad del modelo desaparezca. La clave no es solo dividir el texto, sino la lógica de reproducción fluida (seamless) que conecta las piezas de audio de forma natural. Automatizar este proceso permite que incluso los diálogos largos tengan una actuación natural y sin interrupciones.