Voz
Transforme texto em fala com 5 vozes em português, num arquivo pronto (REST) ou em pedaços que começam a tocar antes do fim (WebSocket). R$ 20 por 1 milhão de caracteres.
2 min de leitura · atualizado em 13/10/2026As vozes
| Voz | id | Perfil | Bom para | Prévia |
|---|---|---|---|---|
| Helena | helena | feminina, jovem | atendimento, confirmações e a voz do avatar Helena | |
| Luana | luana | feminina, animada | boas-vindas, campanhas e varejo | |
| Regina | regina | feminina, madura | saúde, finanças e avisos importantes | |
| Eduardo | eduardo | masculina, neutra | URA, narração e notícias | |
| Gustavo | gustavo | masculina, calma | suporte, tutoriais, cobrança e a voz do avatar Gustavo |
A prévia de cada voz é grátis. A lista também está em GET /v1/voices, sem chave. Os avatares falam com a própria voz: o Gustavo com a voz Gustavo e a Helena com a voz Helena.
Gerar um arquivo
https://api.int8labs.com/v1/ttscurl https://api.int8labs.com/v1/tts \-H "Authorization: Bearer $INT8_API_KEY" \-H "Content-Type: application/json" \-d '{"text": "Sua consulta ficou para terça, às 14h30.", "voice": "helena", "format": "mp3"}' \--output fala.mp3
textstringobrigatório1 a 5000 caracteresDe 1 a 5000 caracteres. A cobrança é por caractere deste texto.
voicestringobrigatórioUma das 5 vozes de GET /v1/voices.
speednumberopcionalpadrão 1.0de 0.8 a 1.3Velocidade da fala, de 0,8 a 1,3.
formatstringopcionalpadrão wavpcm é PCM16 LE mono cru.
sample_rateintegeropcionalpadrão 44100Taxa de amostragem do áudio.
A resposta são os bytes do áudio. Os números da chamada vêm nos cabeçalhos: X-Int8-Characters (caracteres cobrados), X-Int8-Audio-Ms (duração), X-Int8-Cost-Brl (custo, o mesmo do Uso) e X-Int8-Sample-Rate.
Formatos e taxa de amostragem
wav(padrão): PCM16 com cabeçalho, abre em qualquer lugar.mp3: o menor arquivo para guardar e mandar por mensagem.opus: Ogg/Opus, ótimo para web e para WhatsApp.pcm: PCM16 LE mono cru, sem cabeçalho, para tocar direto num player ou mandar para telefonia.
sample_rate aceita 8000, 16000, 22050, 24000 e 44100 Hz (o padrão é 44100; 8000 é a telefonia). Para URA e ligação, use sample_rate: 8000 com pcm ou wav.
Velocidade
speed vai de 0.8 (mais devagar) a 1.3 (mais rápido); o padrão é 1.0. Avisos longos e números de protocolo ficam melhores um pouco abaixo de 1.
Texto
- De 1 a 5.000 caracteres por pedido. Para textos maiores, divida em parágrafos.
- Números, datas, horas, moeda e siglas são lidos por extenso: "14h30" vira "catorze e trinta".
- A cobrança é por caractere do
textque você mandou, depois de sintetizar.
Streaming por WebSocket
wss://api.int8labs.com/v1/tts/streamCom o WebSocket, o primeiro pedaço de áudio chega antes de a fala inteira ficar pronta: bom para conversa e URA. Uma conexão serve várias falas, uma de cada vez.
import asyncioimport jsonimport osimport websockets # pip install "websockets>=14"async def falar(texto: str) -> bytes:audio = bytearray()async with websockets.connect("wss://api.int8labs.com/v1/tts/stream",additional_headers={"Authorization": f"Bearer {os.environ['INT8_API_KEY']}"},) as ws:await ws.send(json.dumps({"type": "speak", "text": texto, "voice": "helena", "sample_rate": 24000}))async for mensagem in ws:if isinstance(mensagem, bytes):if mensagem[0] == 0x01: # 0x01 + índice (uint16 LE) + PCM16 LE monoaudio += mensagem[3:]continueevento = json.loads(mensagem)if evento["type"] == "done":print("1º som em", evento["first_audio_ms"], "ms; custo R$", evento["cost_brl"])breakif evento["type"] == "error":raise RuntimeError(evento["message"])return bytes(audio)pcm = asyncio.run(falar("Sua consulta ficou para terça, às 14h30."))
As mensagens estão na referência do WebSocket de voz. Cada pedaço binário começa com o byte 0x01, seguido do índice do pedaço (2 bytes) e do PCM16.