ANLEITUNG

Text-to-Speech in C# und .NET, offline

Der klassische Weg, aus C# zu sprechen, ist System.Speech: ein paar Zeilen, die Stimmen von Windows, kein Internet. Das funktioniert noch, aber nur unter Windows, die Stimmen klingen altbacken und unterscheiden sich von Rechner zu Rechner. Cloud-Dienste klingen besser, schicken aber jeden Text nach außen und rechnen pro Zeichen ab.

Dieser Leitfaden zeigt einen dritten Weg: die kostenlose SuperClonica-Engine als lokalen HTTP-Server, den jede .NET-App unter Windows, Linux oder macOS aufrufen kann, mit natürlichen Stimmen und WAV-Dateien, die Sie behalten.

Drei Wege, aus .NET zu sprechen

Für einen schnellen Prototyp unter Windows reicht System.Speech; für eine Produktstimme, die überall gleich klingt, nehmen Sie eine Engine.

  • System.Speech: in Windows eingebaut, offline, roboterhafte Stimmen, nur Windows.
  • Cloud-Sprach-APIs: natürliche Stimmen, aber Konto, Schlüssel, Abrechnung pro Zeichen und Ihr Text auf fremden Servern.
  • SuperClonica: ein lokaler Server mit natürlichen, Figuren- und eigenen Stimmen, offline, auf jedem System, auf dem 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 C# aufrufen

Mit System.Net.Http, System.Text und System.Text.Json.Nodes braucht eine Anfrage in .NET 6 oder neuer nur ein paar Zeilen: using var http = new HttpClient(); var voice = JsonNode.Parse(File.ReadAllText("voice.json")); var body = new JsonObject { ["text"] = "Hallo aus C#!", ["voice"] = voice, ["lang"] = "de", ["seed"] = 7 }; var res = await http.PostAsync("http://localhost:8000/synthesize", new StringContent(body.ToJsonString(), Encoding.UTF8, "application/json")); File.WriteAllBytes("hello.wav", await res.Content.ReadAsByteArrayAsync()); Für eine Standardstimme setzen Sie ["voice"] = "F1", statt eine Datei zu laden. Derselbe Text, dieselbe Stimme und derselbe Seed ergeben immer denselben Ton, cachen Sie also Dateien für wiederkehrende Sätze und spielen Sie sie mit der Audiobibliothek ab, die Ihre App bereits nutzt.

Gewohnheiten für den Produktivbetrieb

Behalten Sie einen einzigen HttpClient für die gesamte Laufzeit der App. 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.