GUIA

Texto em fala em C++: vozes naturais para jogos e apps

O C++ não tem uma biblioteca padrão de texto em fala. O comum é a API de voz do sistema, diferente no Windows, macOS e Linux, um sintetizador de formantes antigo como o eSpeak NG, que soa robótico, ou um motor neural chamado pelo C++. Este último dá vozes naturais que soam iguais em todas as plataformas.

A SuperClonica oferece vozes naturais em 31 idiomas para testar grátis online, um motor gratuito com linha de comando e servidor HTTP em Docker, e mais de 170 vozes de catálogo. Este guia mostra dois jeitos de usá-lo no C++: falas geradas antes e um servidor local em tempo de execução.

Opções de voz em C++

A maioria dos jogos usa arquivos pré-gerados para diálogos fixos e um servidor só para o texto que os jogadores escrevem.

  • APIs do sistema: SAPI no Windows, AVSpeechSynthesizer nos sistemas da Apple, Speech Dispatcher no Linux; três caminhos de código diferentes.
  • eSpeak NG: pequeno e embutível, mas claramente robótico.
  • Arquivos pré-gerados: as falas do jogo ou do app geradas uma vez e distribuídas como WAV ou OGG.
  • Um servidor HTTP local: o programa envia texto e recebe um WAV.

Escolha uma voz grátis online

Na página de qualquer voz, escreva uma fala de 30 a 100 caracteres, escolha o idioma e clique no botão para gerar. Em poucos segundos você sabe se combina com o jogo ou app, sem conta.

Gere as falas antes

O mesmo texto, voz e semente geram sempre o mesmo arquivo, então as falas podem ficar no controle de versão e ser regeneradas quando preciso.

  • Instale o motor: python -m pip install superclonica-cpu.
  • De um script de build ou ferramenta, chame a linha de comando: std::system("superclonica --text \"Welcome, traveler.\" --voice M2 --lang en --output welcome.wav");
  • O nome do arquivo define o formato: WAV, MP3, OGG ou FLAC.
  • Carregue os arquivos com a biblioteca de áudio que você já usa, como SDL_mixer, SFML, raylib ou miniaudio.

Um servidor de voz em execução

Para texto que só existe em execução, inicie o servidor uma vez: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Depois envie JSON com a libcurl e grave a resposta num arquivo (inclua curl/curl.h e faça o link com a libcurl): std::string body = R"({"text": "Welcome, traveler.", "voice": "M2", "lang": "en"})"; CURL* c = curl_easy_init(); curl_slist* h = curl_slist_append(nullptr, "Content-Type: application/json"); curl_easy_setopt(c, CURLOPT_URL, "http://localhost:8000/synthesize"); curl_easy_setopt(c, CURLOPT_HTTPHEADER, h); curl_easy_setopt(c, CURLOPT_POSTFIELDS, body.c_str()); FILE* f = std::fopen("welcome.wav", "wb"); curl_easy_setopt(c, CURLOPT_WRITEDATA, f); curl_easy_perform(c); std::fclose(f); curl_slist_free_all(h); curl_easy_cleanup(c); A resposta é um WAV mono de 16 bits; os cabeçalhos X-Sample-Rate e X-Duration-Seconds o descrevem. Defina SUPERCLONICA_API_KEY e mantenha o servidor numa rede privada se ele não estiver na máquina do próprio jogador.

Vozes que você pode publicar

Para um jogo ou app que você publica, use as dez vozes padrão, de M1 a M5 e de F1 a F5, grátis pela licença OpenRAIL-M, ou a sua própria voz treinada no estúdio da SuperClonica com a gravação de um ator que concordou. O motor e a imagem Docker são Apache 2.0. Vozes de personagens feitas por fãs são para projetos de fã, não para lançamentos comerciais.