Texto em fala no Pygame com vozes naturais
O Pygame é onde muita gente escreve o primeiro jogo, e cedo ou tarde um personagem precisa falar. O pyttsx3 fala com as vozes robóticas do sistema, e APIs na nuvem precisam de chave e internet, que o computador da escola ou o notebook de uma game jam podem não ter.
O motor SuperClonica é um pacote Python, então um projeto Pygame pode gerar a voz sozinho, offline, com vozes naturais em 31 idiomas, e tocar o resultado pelo pygame.mixer sem mexer em arquivos. Este guia mostra o código, como manter o jogo fluido enquanto uma fala é gerada e quando vale distribuir arquivos.
Duas formas de fazer um jogo Pygame falar
Use a voz em tempo real para protótipos, ferramentas e jogos rodados do código-fonte; para um jogo pronto, distribua arquivos.
- Durante o jogo: o jogo gera qualquer texto, como o nome do jogador, e toca na hora.
- Arquivos gerados antes: falas feitas no desenvolvimento, carregadas com pygame.mixer.Sound como qualquer efeito.
- As duas formas usam o mesmo motor, vozes e idiomas; o chinês ainda não é suportado.
- Tudo roda num processador comum, sem placa de vídeo.
Escolha vozes grátis online
Na página de qualquer voz, escreva uma fala do seu personagem, de 30 a 100 caracteres, escolha o idioma e clique no botão para gerar. Em poucos segundos você ouve se a voz combina, sem conta.
Gere uma fala durante o jogo
Carregar o motor leva alguns segundos, então crie-o uma vez no início, não a cada fala.
- Instale os dois pacotes: python -m pip install superclonica-cpu pygame.
- Ajuste o mixer ao formato do motor antes do pygame.init(): pygame.mixer.init(frequency=44100, size=-16, channels=1).
- Crie o motor uma vez, tts = Superclonica(), depois gere e toque uma fala: audio, rate = tts.synthesize("Bem-vindo, herói! A vila precisa de você.", "M2", "pt"); sound = pygame.mixer.Sound(array=(audio * 32767).astype(np.int16)); sound.play().
- O motor devolve amostras em ponto flutuante a 44,1 kHz; convertê-las em inteiros de 16 bits é tudo que o pygame precisa.
Mantenha o jogo fluido
Uma fala curta leva cerca de meio segundo num processador de desktop, e um quadro congelado aparece. Gere as falas numa thread em segundo plano e coloque o Sound pronto numa fila que o laço principal toca, ou gere as falas de uma fase enquanto a tela de carregamento aparece. Mantenha um dicionário de texto para Sound, para que uma fala repetida seja gerada só uma vez.
Ao lançar o jogo
A voz em tempo real precisa do motor, cerca de 385 MB de modelo e Python no computador do jogador, o que serve para um jogo de game jam rodado do código, mas pesa num download. Para um jogo lançado, gere todas as falas antes com tts.save('line.ogg', audio) e distribua os arquivos OGG. Use as dez vozes padrão do modelo, de M1 a M5 e de F1 a F5, ou a sua própria voz treinada com um locutor que concordou; vozes de personagens feitas por fãs são para jogos de fãs e paródias.