Pygame Text-to-Speech mit natürlichen Stimmen
In Pygame schreiben viele ihr erstes Spiel, und früher oder später muss eine Figur sprechen. pyttsx3 spricht mit den roboterhaften Systemstimmen, und Cloud-APIs brauchen einen Schlüssel und Internet, was ein Schulrechner oder ein Game-Jam-Laptop vielleicht nicht hat.
Die SuperClonica-Engine ist ein Python-Paket, also kann ein Pygame-Projekt Text selbst vertonen, offline, mit natürlichen Stimmen in 31 Sprachen, und das Ergebnis über pygame.mixer abspielen, ohne eine Datei anzufassen. Dieser Leitfaden zeigt den Code, wie das Spiel flüssig bleibt, während eine Zeile vertont wird, und wann Sie besser Dateien ausliefern.
Zwei Wege, ein Pygame-Spiel sprechen zu lassen
Nutzen Sie Laufzeit-Sprache für Prototypen, Werkzeuge und Spiele, die aus dem Quellcode laufen; für ein fertiges Spiel liefern Sie Dateien aus.
- Zur Laufzeit: Das Spiel vertont beliebigen Text, etwa den Namen des Spielers, und spielt ihn sofort ab.
- Vorab vertonte Dateien: Zeilen aus der Entwicklung, geladen mit pygame.mixer.Sound wie jeder Soundeffekt.
- Beide Wege nutzen dieselbe Engine, Stimmen und Sprachen; Chinesisch wird noch nicht unterstützt.
- Alles läuft auf einem normalen Prozessor, ohne Grafikkarte.
Stimmen gratis online auswählen
Geben Sie auf der Seite einer beliebigen Stimme eine Zeile Ihrer Figur ein, 30 bis 100 Zeichen, wählen Sie die Sprache und klicken Sie auf die Schaltfläche zum Vertonen. In wenigen Sekunden hören Sie, ob die Stimme passt, ohne Konto.
Eine Zeile zur Laufzeit vertonen
Das Laden der Engine dauert einige Sekunden, erzeugen Sie sie also einmal beim Start, nicht für jede Zeile.
- Installieren Sie beide Pakete: python -m pip install superclonica-cpu pygame.
- Stellen Sie den Mixer vor pygame.init() auf das Format der Engine ein: pygame.mixer.init(frequency=44100, size=-16, channels=1).
- Erzeugen Sie die Engine einmal, tts = Superclonica(), dann vertonen und spielen Sie eine Zeile: audio, rate = tts.synthesize("Willkommen, Held! Das Dorf braucht dich.", "M2", "de"); sound = pygame.mixer.Sound(array=(audio * 32767).astype(np.int16)); sound.play().
- Die Engine liefert Gleitkomma-Samples mit 44,1 kHz; sie in 16-Bit-Ganzzahlen umzurechnen ist alles, was pygame braucht.
Das Spiel flüssig halten
Eine kurze Zeile dauert auf einem Desktop-Prozessor etwa eine halbe Sekunde, und ein eingefrorenes Bild fällt auf. Vertonen Sie in einem Hintergrund-Thread und legen Sie den fertigen Sound in eine Warteschlange, die die Hauptschleife abspielt, oder vertonen Sie die Zeilen eines Levels während dessen Ladebildschirm. Führen Sie ein Wörterbuch von Text zu Sound, damit eine wiederkehrende Zeile nur einmal vertont wird.
Wenn Sie das Spiel veröffentlichen
Laufzeit-Sprache braucht die Engine, etwa 385 MB Modell und Python auf dem Rechner der Spieler: für ein Game-Jam-Spiel aus dem Quellcode in Ordnung, für einen Download schwer. Für ein veröffentlichtes Spiel vertonen Sie alle Zeilen vorab mit tts.save('line.ogg', audio) und liefern die OGG-Dateien aus. Nutzen Sie die zehn Standardstimmen des Modells, M1 bis M5 und F1 bis F5, oder Ihre eigene, aus einem zustimmenden Sprecher trainierte Stimme; von Fans gemachte Figurenstimmen sind für Fanspiele und Parodien.