GUIA

Texto em fala em Go offline

A biblioteca padrão do Go não tem síntese de voz, e as respostas de sempre são um SDK na nuvem que cobra por caractere ou um wrapper sobre as vozes robóticas do sistema operacional. Para um serviço, um bot ou uma ferramenta de linha de comando, os dois têm problemas: o texto sai da máquina ou a voz muda de um sistema para outro.

Este guia mostra como chamar o motor gratuito SuperClonica a partir do Go por meio de um servidor HTTP local: vozes naturais, arquivos WAV que ficam com você e net/http comum em qualquer plataforma.

Jeitos de falar a partir do Go

Um serviço que fala com frequência sai mais barato e mais privado com o próprio servidor de voz.

  • SDKs na nuvem: vozes naturais, mas conta, chave, cobrança por caractere e o seu texto nos servidores deles.
  • Vozes do sistema operacional via wrapper: offline, mas robóticas e diferentes em cada plataforma.
  • SuperClonica: um servidor HTTP local com vozes naturais, de personagens e próprias, offline, onde o Docker rodar.
  • Ele fala 31 idiomas; o chinês ainda não é suportado.

Ouça as vozes grátis

Antes de escrever código, abra a página de qualquer voz, escreva uma frase de 30 a 100 caracteres, escolha o idioma e clique no botão para gerar. Em poucos segundos você ouve a voz que o seu app poderia ter, sem conta.

Suba o servidor de voz

Uma placa de vídeo NVIDIA acelera com a imagem cuda, mas não é obrigatória.

  • Suba o servidor em qualquer CPU: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
  • A primeira execução baixa o modelo Supertonic 3, cerca de 385 MB, no volume; GET /health avisa quando está pronto.
  • POST /synthesize recebe JSON com text, voice, lang, seed e normalize e responde com um WAV mono de 16 bits.
  • voice é um nome padrão de M1 a M5 e de F1 a F5, ou o conteúdo JSON de um arquivo de voz.

Chame pelo Go

Com bytes, io, net/http e os da biblioteca padrão, uma requisição cabe em poucas linhas: voice, _ := os.ReadFile("voice.json"); body := append([]byte(`{"text": "Olá do Go!", "lang": "pt", "seed": 7, "voice": `), append(voice, '}')...); res, _ := http.Post("http://localhost:8000/synthesize", "application/json", bytes.NewReader(body)); defer res.Body.Close(); out, _ := os.Create("hello.wav"); defer out.Close(); io.Copy(out, res.Body) Em código real, trate os erros em vez de descartá-los. Para uma voz padrão, envie "voice": "F1" em vez do arquivo. O mesmo texto, voz e seed sempre dão o mesmo áudio, então faça cache dos arquivos de frases que se repetem.

Hábitos para produção

Reaproveite um único http.Client com um timeout sensato. Não exponha a porta 8000 na internet do jeito que está: defina SUPERCLONICA_API_KEY e envie como token Bearer, ou mantenha o servidor numa rede privada. Se chegarem muitas requisições ao mesmo tempo, rode mais cópias do modelo com SUPERCLONICA_LANES, e meça no seu hardware: nos nossos testes uma frase curta levou 0,12 s numa RTX 5070 Ti e 0,43 s com quatro threads de CPU.