La disponibilidad de juegos en pygame

Hola a todos

En el artículo Juegos de sonido: un mercado invisible espera a los héroes , se examinaron juegos de sonido con un sonido envolvente genial y bibliotecas para su creación.

Bueno, decidí comenzar de a poco, y para empezar, organizar la puntuación de acciones del sintetizador en juegos por turnos en pygame.

Por supuesto, esta técnica no es adecuada para todos los juegos, pero en algunos muy.



Crea un módulo de voz.

Organizaremos dos opciones de trabajo en él:

  • Conéctese al Narrador NVDA a través de su controlador dll
  • directamente al sintetizador de Windows a través de SAPI5;



Primero importamos todos los módulos necesarios.
Para conectar nvdaControllerClient32.dll necesitamos ctypes.

import ctypes 

Y en ausencia de NVDA en la computadora, trabajamos directamente con el sintetizador SAPI a través de win32api.

 import win32com.client 


Creamos una clase para nuestra charla.

 class Speech: def __init__(self, config): """Initialize speech class.""" self.config = config 

Aquí probablemente necesites explicar sobre config. En el juego de clase general, que se encarga de inicializar todos los módulos del juego y gira el bucle principal, la configuración del juego se está cargando.

La configuración se puede cargar desde donde sea más conveniente: archivos ini, json, sqlite o cualquier otra opción conveniente.


Pero continuemos con la inicialización de nuestro discurso.

  #    COM . self.speaker = win32com.client.Dispatch("Sapi.SpVoice") #           self.voices = self.speaker.GetVoices() #      self.voices_names = [voice.GetDescription() for voice in self.voices] 

Configure el sintetizador conectado con algunos parámetros de la configuración.
En este ejemplo, solo tomo el índice de la voz instalada (la predeterminada tiene un índice de 0), pero puede realizar configuraciones con una elección de la lista desplegable por nombre, obtenida como se describe anteriormente.

La velocidad de voz se establece en el rango de -10 a +10. Pero no creo que alguien quiera escuchar una voz con una velocidad inferior a 5. Puede experimentar cambiando el valor en la configuración.

Y, por supuesto, el volumen de la voz. Aquí es estándar de 0 a 100.

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

Finalmente, inicialice nvda.

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

Verifique de inmediato si nuestro programa puede conectarse a un programa NVDA en ejecución.

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

Después de haber inicializado tanto el sintetizador SAPI como el nvda dll, puede iniciar la función para seleccionar la salida de audio de la voz.
  self.set_speak_out() 


Agregue la función para configurar la voz de la lista disponible por índice.

  def set_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') 


Y ahora la función para seleccionar la salida de audio de voz. Aquí realmente elegimos lo que usaremos para el trabajo: nvda o un sintetizador directamente.

La elección consta de dos parámetros:

  • La bandera está en la configuración si el usuario incluso quiere que el juego use NVDA;
  • Posibles errores al conectarse a NVDA;

  def set_speak_out(self): """Set speak out: nvda or sapi.""" if self.nvda and not self.nvda_error: self.speak = self.speak_nvda else: self.speak = self.speak_sapi 


Y, por supuesto, escribiremos las funciones de pronunciación.

Para NVDA:

  def speak_nvda(self, phrase): self.sLib.nvdaController_speakText(phrase) 

Y esta es una función para pronunciar directamente al sintetizador:
  def speak_sapi(self, phrase): self.speaker.Speak(phrase) 


Eso es todo Ahora, en cualquier parte de la lógica del juego, enviamos la información necesaria a speech.speak ().

Espero que este artículo sea útil para alguien y aparezcan más juegos disponibles.

Source: https://habr.com/ru/post/es424477/


All Articles