ANLEITUNG

Text-to-Speech in Go, offline

Die Standardbibliothek von Go hat keine Sprachsynthese, und die üblichen Antworten sind ein Cloud-SDK mit Abrechnung pro Zeichen oder ein Wrapper um die roboterhaften Stimmen des Betriebssystems. Für einen Dienst, einen Bot oder ein Kommandozeilenwerkzeug hat beides Nachteile: Ihr Text verlässt die Maschine, oder die Stimme ändert sich von System zu System.

Dieser Leitfaden zeigt, wie Sie die kostenlose SuperClonica-Engine aus Go über einen lokalen HTTP-Server aufrufen: natürliche Stimmen, WAV-Dateien, die Sie behalten, und schlichtes net/http auf jeder Plattform.

Wege, aus Go zu sprechen

Ein Dienst, der oft spricht, ist mit eigenem Sprachserver günstiger und privater.

  • Cloud-SDKs: natürliche Stimmen, aber Konto, Schlüssel, Abrechnung pro Zeichen und Ihr Text auf fremden Servern.
  • Betriebssystemstimmen über einen Wrapper: offline, aber roboterhaft und auf jeder Plattform anders.
  • SuperClonica: ein lokaler HTTP-Server mit natürlichen, Figuren- und eigenen Stimmen, offline, überall, wo Docker läuft.
  • Er spricht 31 Sprachen; Chinesisch wird noch nicht unterstützt.

Die Stimmen gratis anhören

Bevor Sie Code schreiben, öffnen Sie die Seite einer beliebigen Stimme, geben einen Satz mit 30 bis 100 Zeichen ein, wählen die Sprache und klicken auf die Schaltfläche zum Vertonen. In wenigen Sekunden hören Sie die Stimme, die Ihre App haben könnte, ohne Konto.

Den Sprachserver starten

Eine NVIDIA-Grafikkarte macht es mit dem cuda-Image schneller, ist aber nicht nötig.

  • Starten Sie den Server auf jedem Prozessor: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
  • Der erste Start lädt das Modell Supertonic 3, etwa 385 MB, in das Volume; GET /health zeigt, wann er bereit ist.
  • POST /synthesize nimmt JSON mit text, voice, lang, seed und normalize und antwortet mit einem 16-Bit-Mono-WAV.
  • voice ist ein Standardname von M1 bis M5 und F1 bis F5 oder der JSON-Inhalt einer Stimmdatei.

Aus Go aufrufen

Mit bytes, io, net/http und os aus der Standardbibliothek braucht eine Anfrage nur ein paar Zeilen: voice, _ := os.ReadFile("voice.json"); body := append([]byte(`{"text": "Hallo aus Go!", "lang": "de", "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) Behandeln Sie die Fehler in echtem Code, statt sie zu verwerfen. Für eine Standardstimme senden Sie "voice": "F1" statt der Datei. Derselbe Text, dieselbe Stimme und derselbe Seed ergeben immer denselben Ton, cachen Sie also Dateien für wiederkehrende Sätze.

Gewohnheiten für den Produktivbetrieb

Verwenden Sie einen einzigen http.Client mit sinnvollem Timeout. Stellen Sie Port 8000 nicht unverändert ins Internet: Setzen Sie SUPERCLONICA_API_KEY und senden Sie ihn als Bearer-Token, oder lassen Sie den Server in einem privaten Netz. Kommen viele Anfragen gleichzeitig, starten Sie mit SUPERCLONICA_LANES mehr Kopien des Modells, und messen Sie auf Ihrer Hardware: In unseren Tests dauerte ein kurzer Satz 0,12 s auf einer RTX 5070 Ti und 0,43 s auf vier CPU-Threads.