Synthèse vocale en C++ : des voix naturelles pour jeux et apps
C++ n’a pas de bibliothèque standard de synthèse vocale. On choisit d’habitude l’API vocale du système, différente sous Windows, macOS et Linux, un vieux synthétiseur à formants comme eSpeak NG, qui sonne robotique, ou un moteur neuronal appelé depuis C++. Ce dernier donne des voix naturelles identiques sur toutes les plateformes.
SuperClonica propose des voix naturelles en 31 langues à essayer gratuitement en ligne, un moteur gratuit avec ligne de commande et serveur HTTP en Docker, et plus de 170 voix de catalogue. Ce guide montre deux façons de l’utiliser en C++ : des répliques préparées à l’avance et un serveur local à l’exécution.
Les options vocales en C++
La plupart des jeux utilisent des fichiers préparés pour les dialogues fixes et un serveur seulement pour le texte écrit par les joueurs.
- API système : SAPI sous Windows, AVSpeechSynthesizer chez Apple, Speech Dispatcher sous Linux ; trois chemins de code différents.
- eSpeak NG : petit et intégrable, mais nettement robotique.
- Des fichiers préparés : les répliques du jeu ou de l’app vocalisées une fois et livrées en WAV ou OGG.
- Un serveur HTTP local : le programme envoie le texte et reçoit un WAV.
Choisir une voix gratuitement
Sur la page de n’importe quelle voix, saisissez une réplique de 30 à 100 caractères, choisissez la langue et cliquez sur le bouton de synthèse. En quelques secondes, vous savez si elle convient à votre jeu ou à votre app, sans compte.
Vocaliser les répliques à l’avance
Même texte, même voix et même graine donnent toujours le même fichier : les répliques vocalisées peuvent vivre dans le gestionnaire de versions et être régénérées à la demande.
- Installez le moteur : python -m pip install superclonica-cpu.
- Depuis un script de build ou un outil, appelez la ligne de commande : std::system("superclonica --text \"Welcome, traveler.\" --voice M2 --lang en --output welcome.wav");
- Le nom du fichier décide du format : WAV, MP3, OGG ou FLAC.
- Chargez les fichiers avec la bibliothèque audio que vous utilisez déjà, comme SDL_mixer, SFML, raylib ou miniaudio.
Un serveur vocal à l’exécution
Pour un texte qui n’existe qu’à l’exécution, lancez le serveur une fois : docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Envoyez ensuite du JSON avec libcurl et écrivez la réponse dans un fichier (incluez curl/curl.h et liez avec 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 réponse est un WAV mono 16 bits ; les en-têtes X-Sample-Rate et X-Duration-Seconds le décrivent. Définissez SUPERCLONICA_API_KEY et gardez le serveur sur un réseau privé s’il n’est pas sur la machine du joueur.
Des voix à publier
Pour un jeu ou une app que vous publiez, utilisez les dix voix de base, de M1 à M5 et de F1 à F5, gratuites sous la licence OpenRAIL-M, ou votre propre voix entraînée dans le studio SuperClonica à partir de l’enregistrement d’un comédien qui a donné son accord. Le moteur et l’image Docker sont sous Apache 2.0. Les voix de personnages faites par des fans sont pour les projets de fans, pas pour les sorties commerciales.