GUIDE

Synthèse vocale en Go hors ligne

La bibliothèque standard de Go n’a pas de synthèse vocale, et les réponses habituelles sont un SDK cloud facturé au caractère ou une surcouche des voix robotiques du système. Pour un service, un bot ou un outil en ligne de commande, les deux ont des défauts : votre texte quitte la machine, ou la voix change d’un système à l’autre.

Ce guide montre comment appeler le moteur gratuit SuperClonica depuis Go via un serveur HTTP local : des voix naturelles, des fichiers WAV que vous gardez et un simple net/http sur toutes les plateformes.

Les façons de parler depuis Go

Un service qui parle souvent revient moins cher et reste plus privé avec son propre serveur vocal.

  • SDK cloud : voix naturelles, mais compte, clé, facturation au caractère et votre texte sur leurs serveurs.
  • Voix du système via une surcouche : hors ligne, mais robotiques et différentes sur chaque plateforme.
  • SuperClonica : un serveur HTTP local avec des voix naturelles, de personnages et personnalisées, hors ligne, partout où tourne Docker.
  • Il parle 31 langues ; le chinois n’est pas encore pris en charge.

Écouter les voix gratuitement

Avant d’écrire du code, ouvrez la page de n’importe quelle voix, saisissez une phrase de 30 à 100 caractères, choisissez la langue et cliquez sur le bouton de synthèse. En quelques secondes, vous entendez la voix que pourrait avoir votre appli, sans compte.

Lancer le serveur vocal

Une carte graphique NVIDIA accélère le tout avec l’image cuda, mais elle n’est pas obligatoire.

  • Lancez le serveur sur n’importe quel processeur : docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
  • Le premier démarrage télécharge le modèle Supertonic 3, environ 385 Mo, dans le volume ; GET /health indique quand il est prêt.
  • POST /synthesize reçoit du JSON avec text, voice, lang, seed et normalize, et répond par un WAV mono 16 bits.
  • voice est un nom de base de M1 à M5 et de F1 à F5, ou le contenu JSON d’un fichier de voix.

L’appeler depuis Go

Avec bytes, io, net/http et os de la bibliothèque standard, une requête tient en quelques lignes : voice, _ := os.ReadFile("voice.json"); body := append([]byte(`{"text": "Bonjour depuis Go !", "lang": "fr", "seed": 7, "voice": `), append(voice, '}')...); res, _ := http.Post("http://localhost:8000/synthesize", "application/json", bytes.NewReader(body)); defer res.Body.Close(); out, _ := os.Create("hello.wav"); defer out.Close(); io.Copy(out, res.Body) Dans du vrai code, gérez les erreurs au lieu de les ignorer. Pour une voix de base, envoyez "voice": "F1" au lieu du fichier. Le même texte, la même voix et le même seed donnent toujours le même son : mettez en cache les fichiers des phrases qui reviennent.

Bonnes pratiques en production

Réutilisez un seul http.Client avec un délai d’expiration raisonnable. N’exposez pas le port 8000 sur internet tel quel : définissez SUPERCLONICA_API_KEY et envoyez-la comme jeton Bearer, ou gardez le serveur sur un réseau privé. Si beaucoup de requêtes arrivent en même temps, lancez plus de copies du modèle avec SUPERCLONICA_LANES, et mesurez sur votre matériel : dans nos tests, une phrase courte a pris 0,12 s sur une RTX 5070 Ti et 0,43 s sur quatre threads de processeur.