GUÍA

Texto a voz en C++: voces naturales para juegos y apps

C++ no tiene una biblioteca estándar de texto a voz. Lo habitual es la API de voz del sistema, distinta en Windows, macOS y Linux, un sintetizador de formantes antiguo como eSpeak NG, que suena robótico, o un motor neuronal al que llamas desde C++. Este último da voces naturales que suenan igual en todas las plataformas.

SuperClonica te da voces naturales en 31 idiomas para probar gratis en línea, un motor gratuito con línea de comandos y servidor HTTP en Docker, y más de 170 voces de catálogo. Esta guía muestra dos formas de usarlo desde C++: frases generadas de antemano y un servidor local en tiempo de ejecución.

Opciones de voz en C++

La mayoría de juegos usan archivos pregenerados para los diálogos fijos y un servidor solo para el texto que escriben los jugadores.

  • APIs del sistema: SAPI en Windows, AVSpeechSynthesizer en sistemas de Apple, Speech Dispatcher en Linux; tres caminos de código distintos.
  • eSpeak NG: pequeño e integrable, pero claramente robótico.
  • Archivos pregenerados: las frases del juego o la app generadas una vez y distribuidas como WAV u OGG.
  • Un servidor HTTP local: tu programa envía texto y recibe un WAV.

Elige una voz gratis en línea

En la página de cualquier voz, escribe una frase de 30 a 100 caracteres, elige el idioma y pulsa el botón para generarla. En unos segundos sabrás si encaja con tu juego o app, sin cuenta.

Genera las frases de antemano

El mismo texto, voz y semilla dan siempre el mismo archivo, así que las frases generadas pueden vivir en el control de versiones y regenerarse cuando haga falta.

  • Instala el motor: python -m pip install superclonica-cpu.
  • Desde un script de compilación o una herramienta, llama a la línea de comandos: std::system("superclonica --text \"Welcome, traveler.\" --voice M2 --lang en --output welcome.wav");
  • El nombre del archivo decide el formato: WAV, MP3, OGG o FLAC.
  • Carga los archivos con la biblioteca de audio que ya usas, como SDL_mixer, SFML, raylib o miniaudio.

Un servidor de voz en ejecución

Para texto que solo existe en ejecución, inicia el servidor una vez: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Después envía JSON con libcurl y escribe la respuesta en un archivo (incluye curl/curl.h y enlaza con libcurl): std::string body = R"({"text": "Welcome, traveler.", "voice": "M2", "lang": "en"})"; CURL* c = curl_easy_init(); curl_slist* h = curl_slist_append(nullptr, "Content-Type: application/json"); curl_easy_setopt(c, CURLOPT_URL, "http://localhost:8000/synthesize"); curl_easy_setopt(c, CURLOPT_HTTPHEADER, h); curl_easy_setopt(c, CURLOPT_POSTFIELDS, body.c_str()); FILE* f = std::fopen("welcome.wav", "wb"); curl_easy_setopt(c, CURLOPT_WRITEDATA, f); curl_easy_perform(c); std::fclose(f); curl_slist_free_all(h); curl_easy_cleanup(c); La respuesta es un WAV mono de 16 bits; las cabeceras X-Sample-Rate y X-Duration-Seconds lo describen. Define SUPERCLONICA_API_KEY y deja el servidor en una red privada si no está en la máquina del propio jugador.

Voces que puedes publicar

Para un juego o una app que publicas, usa las diez voces de serie, de M1 a M5 y de F1 a F5, gratuitas con la licencia OpenRAIL-M, o tu propia voz entrenada en el estudio de SuperClonica con la grabación de un actor que dio su permiso. El motor y la imagen Docker son Apache 2.0. Las voces de personajes hechas por fans son para proyectos de fans, no para lanzamientos comerciales.