A disponibilidade de jogos no pygame

Olá pessoal.

No artigo Jogos de som: um mercado invisível aguarda heróis , foram examinados jogos de som com som surround legal e bibliotecas para sua criação.

Bem, decidi começar pequeno e, para começar, organizar a pontuação das ações do sintetizador em jogos baseados em turnos no pygame.

Obviamente, essa técnica não é adequada para todos os jogos, mas em alguns casos.



Crie um módulo de fala.

Vamos organizar duas opções de trabalho:

  • Conecte-se ao NVDA Narrator através de sua dll Controller
  • diretamente para o sintetizador de janelas através do SAPI5;



Primeiro importamos todos os módulos necessários.
Para conectar o nvdaControllerClient32.dll, precisamos de ctypes.

import ctypes 

E, na ausência do NVDA no computador, trabalhamos diretamente com o sintetizador SAPI através do win32api.

 import win32com.client 


Criamos uma aula para nossa palestra.

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

Aqui você provavelmente precisará explicar sobre a configuração. Na classe geral Game, responsável por inicializar todos os módulos do jogo e torcer o loop principal, as configurações do jogo estão sendo carregadas.

As configurações podem ser carregadas de onde é mais conveniente: arquivos ini, json, sqlite ou qualquer outra opção conveniente.


Mas vamos continuar a inicialização do nosso 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 o sintetizador conectado com alguns parâmetros das configurações.
Neste exemplo, eu apenas pego o índice da voz instalada (a padrão possui um índice de 0), mas você pode fazer configurações com uma opção na lista suspensa por nome, obtida conforme descrito acima.

A velocidade da voz é definida no intervalo de -10 a +10. Mas não acho que alguém queira ouvir uma voz com velocidade abaixo de 5. Você pode experimentar alterando o valor nas configurações.

E, claro, o volume da voz. Aqui é padrão de 0 a 100.

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

Por fim, inicialize o nvda.

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

Verifique imediatamente se nosso programa pode se conectar a um programa NVDA em execução.

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

Depois de inicializar o sintetizador SAPI e a nvda dll, você poderá iniciar a função para selecionar a saída de áudio da fala.
  self.set_speak_out() 


Adicione a função para definir a voz na lista disponível pelo í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') 


E agora a função para selecionar o discurso de saída de áudio. Aqui, na verdade, escolhemos o que usaremos para o trabalho: nvda ou um sintetizador diretamente.

A escolha consiste em dois parâmetros:

  • A bandeira está nas configurações se o usuário deseja que o jogo use o NVDA;
  • Possíveis erros ao conectar ao 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 


E, claro, escreveremos as funções de pronúncia.

Para NVDA:

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

E esta é uma função para pronunciar diretamente no sintetizador:
  def speak_sapi(self, phrase): self.speaker.Speak(phrase) 


Isso é tudo. Agora, em qualquer parte da lógica do jogo, enviamos as informações necessárias para speech.speak ().

Espero que este artigo seja útil para alguém e mais jogos disponíveis apareçam.

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


All Articles