Text-to-Speech in JavaScript und Node.js
JavaScript hat Sprachausgabe eingebaut: die Web Speech API im Browser. Sie ist kostenlos und braucht keine Einrichtung, aber die Stimmen hängen vom System des Besuchers ab, und das Ergebnis lässt sich nicht als Datei speichern. Brauchen Sie überall dieselbe natürliche Stimme, Figurenstimmen oder Audiodateien, brauchen Sie eine Sprach-Engine.
Dieser Leitfaden vergleicht beide Wege ehrlich und zeigt, wie Sie die kostenlose SuperClonica-Engine aus Node.js und aus einer Web-App über einen lokalen HTTP-Server aufrufen.
Zwei Wege, aus JavaScript zu sprechen
Für einen schnellen Vorlese-Button reicht die Web Speech API; für die Stimme eines Produkts nehmen Sie eine Engine.
- Web Speech API: eine Zeile im Browser, speechSynthesis.speak(new SpeechSynthesisUtterance("Hello!")), mit den Stimmen von Betriebssystem oder Browser.
- Die Stimmen unterscheiden sich zwischen Windows, macOS, Android und Browsern, manche sind Online-Dienste, und der Ton lässt sich nicht als Datei speichern.
- SuperClonica: ein lokaler Server mit derselben natürlichen Stimme auf jedem Gerät, Figuren- und eigenen Stimmen und WAV-Dateien, die Sie speichern und cachen können.
- Er spricht 31 Sprachen; Chinesisch wird noch nicht unterstützt.
Die Stimmen der Engine 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.
Einen lokalen 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 geparste Inhalt einer Stimmdatei.
Aus Node.js und dem Browser aufrufen
In Node.js 18 oder neuer ist fetch eingebaut, mit importiertem fs braucht eine Anfrage also nur ein paar Zeilen: const voice = JSON.parse(fs.readFileSync("voice.json", "utf8")); const res = await fetch("http://localhost:8000/synthesize", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ text: "Hallo aus Node!", voice, lang: "de", seed: 7 }) }); fs.writeFileSync("hello.wav", Buffer.from(await res.arrayBuffer())); In einer Web-App halten Sie den Sprachserver privat und rufen ihn aus Ihrem eigenen Backend auf; die Seite bekommt den Ton als Blob und spielt ihn mit new Audio(URL.createObjectURL(blob)).play() ab. Derselbe Text, dieselbe Stimme und derselbe Seed ergeben immer dieselbe Datei, cachen Sie also Audio für wiederkehrende Sätze.
Gewohnheiten für den Produktivbetrieb
Stellen Sie Port 8000 nicht unverändert ins Internet: Setzen Sie SUPERCLONICA_API_KEY und senden Sie ihn als Bearer-Token, stellen Sie den Server hinter einen Reverse Proxy mit HTTPS oder lassen Sie ihn 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.