Verfügbarkeit von Pygame-Spielen

Hallo allerseits

In dem Artikel Sound games: ein unsichtbarer Markt, der auf Helden wartet , wurden Soundspiele mit coolem Surround-Sound und Bibliotheken für seine Erstellung betrachtet.

Nun, ich entschied mich, klein anzufangen und zu beginnen, die Synchronisation von Aktionen in rundenbasierten Spielen auf Pygame zu organisieren.

Natürlich ist diese Technik nicht für alle Spiele geeignet, aber in manchen ist sie sehr gleichmäßig.



Erstellen Sie ein Sprachmodul.

Darin organisieren wir zwei Arbeitsmöglichkeiten:

  • Verbindung zum NVDA-Bildschirmlautsprecher über seine Controller-DLL;
  • direkt zum Windows-Synthesizer über SAPI5;



Zuerst importieren wir alle notwendigen Module.
Für die Verbindung von nvdaControllerClient32.dll benötigen wir ctypes.

import ctypes

Wenn keine NVDA auf dem Computer vorhanden ist, arbeiten wir über win32api direkt mit dem SAPI-Synthesizer.

import win32com.client


Wir erstellen eine Klasse für unsere Govoriki.

classSpeech:def__init__(self, config):"""Initialize speech class."""
        self.config = config

Dort müsste man wohl über die config erklären. In der allgemeinen Game-Klasse, die sich mit der Initialisierung aller Module des Spiels befasst und die Hauptschleife dreht, werden die Spieleinstellungen geladen.

Die Einstellungen können von dort heruntergeladen werden, wo es bequemer ist: ini-Dateien, json, sqlite oder eine andere praktische Option.


Aber lasst uns die Initialisierung unserer Rede fortsetzen.

# подключаем синтезатор как COM объект.self.speaker = win32com.client.Dispatch("Sapi.SpVoice")
        # Получаем все доступные синтезаторы в системе и сохраняем в спискеself.voices = self.speaker.GetVoices()
        # Создаем список имен полученных голосовself.voices_names = [voice.GetDescription() for voice inself.voices]

Richten Sie den angeschlossenen Synthesizer mit einigen Parametern aus den Einstellungen ein.
In diesem Beispiel nehme ich nur den Index der installierten Stimme (der Standardindex ist 0), aber Sie können Einstellungen mit einer Auswahl aus der Dropdown-Liste nach Namen vornehmen, die wie oben beschrieben erhalten wird.

Die Sprachgeschwindigkeit wird im Bereich von -10 bis +10 eingestellt. Ich glaube jedoch nicht, dass jemand die Stimme mit einer niedrigeren Geschwindigkeit als 5 hören möchte. Sie können selbst experimentieren, indem Sie den Wert in den Einstellungen ändern.

Und natürlich die Lautstärke der Stimme. Hier ist es Standard von 0 bis 100.

self.set_voice(self.config.voice)
        self.speaker.Rate = self.config.rate
        self.speaker.Volume = self.config.volume

Nun, wir initialisieren nvda.

self.nvda = self.config.nvda
        self.nvda_error = Falseself.sLib = ctypes.windll.LoadLibrary('./nvdaControllerClient32.dll')

Prüfen Sie sofort, ob unser Programm eine Verbindung zu einem funktionierenden NVDA herstellen kann.

        nvda_error = self.sLib.nvdaController_testIfRunning()
        errorMessage = str(ctypes.WinError(nvda_error))
        if0 != nvda_error:
            print('NVDA error: ' + errorMessage)
            self.nvda_error = True

Nachdem sowohl der SAPI-Synthesizer als auch nvda dll initialisiert wurden, können Sie die Audioausgangsauswahlfunktion ausführen.
self.set_speak_out()
        


Fügen Sie eine Funktion hinzu, um eine Stimme aus der durch Index verfügbaren Liste zu installieren.

defset_voice(self, index):"""Set voice for speak."""try:
            self.speaker.Voice = self.voices[index]
            self.speak_sapi(self.voices_names[index])
        except:
            print('error: do not set voice')


Und jetzt die Funktion der Wahl der Audioausgabe von Sprache. Hier wählen wir eigentlich aus, was wir für die Arbeit verwenden werden: nvda oder einen Synthesizer direkt.

Die Auswahl besteht aus zwei Parametern:

  • Das Flag in den Einstellungen, ob der Benutzer NVDA überhaupt verwenden soll;
  • Mögliche Fehler beim Verbinden mit NVDA;

defset_speak_out(self):"""Set speak out: nvda or sapi."""if self.nvda andnot self.nvda_error:
            self.speak = self.speak_nvda
        else:
            self.speak = self.speak_sapi


Und natürlich schreiben wir die Aussprachefunktionen.

Für NVDA:

defspeak_nvda(self, phrase):
        self.sLib.nvdaController_speakText(phrase)

Und dies ist eine Funktion für die Aussprache direkt auf dem Synthesizer:
defspeak_sapi(self, phrase):
        self.speaker.Speak(phrase)


Das ist alles. Nun, irgendwo in der Spielelogik, senden wir die notwendigen Informationen an speech.speak ().

Ich hoffe, dass dieser Artikel für jemanden nützlich ist und mehr verfügbare Spiele erscheinen werden.


Jetzt auch beliebt: