Pular para o conteúdo
int8labs

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/2026

As vozes

VozidPerfilBom paraPrévia
Helenahelenafeminina, jovematendimento, confirmações e a voz do avatar Helena
Luanaluanafeminina, animadaboas-vindas, campanhas e varejo
Reginareginafeminina, madurasaúde, finanças e avisos importantes
Eduardoeduardomasculina, neutraURA, narração e notícias
Gustavogustavomasculina, calmasuporte, 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

POSThttps://api.int8labs.com/v1/tts
curl 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 caracteres

De 1 a 5000 caracteres. A cobrança é por caractere deste texto.

voicestringobrigatório

Uma das 5 vozes de GET /v1/voices.

helenaluanareginaeduardogustavo
speednumberopcionalpadrão 1.0de 0.8 a 1.3

Velocidade da fala, de 0,8 a 1,3.

formatstringopcionalpadrão wav

pcm é PCM16 LE mono cru.

wavmp3opuspcm
sample_rateintegeropcionalpadrão 44100

Taxa de amostragem do áudio.

800016000220502400044100

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 text que você mandou, depois de sintetizar.

Streaming por WebSocket

WSwss://api.int8labs.com/v1/tts/stream

Com 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 asyncio
import json
import os
​
import 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 mono
audio += mensagem[3:]
continue
evento = json.loads(mensagem)
if evento["type"] == "done":
print("1º som em", evento["first_audio_ms"], "ms; custo R$", evento["cost_brl"])
break
if 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.