Transcrição de Áudio
Converta arquivos de áudio em texto com IA. Suporta MP3, WAV, OGG, M4A, OPUS, FLAC e mais.
Arraste arquivos de áudio aqui
ou
MP3 · WAV · OGG · M4A · OPUS · FLAC · MP4 · WebM
Transcrições geradas
Síntese de Voz
Converta texto em áudio com vozes neurais. Escolha o motor conforme sua necessidade de velocidade ou qualidade.
Converte valores monetários, porcentagens e números em texto por extenso antes da síntese
API para Desenvolvedores
Serviço restrito à rede interna 192.168.30.0/24. Use as rotas abaixo para integrar com seus sistemas.
Endereços de acesso
Acesso direto (naxos)
http://192.168.30.22:9000Recomendado para serviços internos (ex: ActiveBI/Odoo em malta)
Via domínio (nginx malta)
https://whisper.consultline.com.brBloqueado para acesso externo · apenas 192.168.30.x
Endpoints
Whisper STT — Transcrição de Áudio
GET
/health
Status do serviço e modelo carregado
POST
/transcribe
Transcrição de arquivo único · multipart/form-data: file, language
POST
/batch
Lote assíncrono · multipart/form-data: files[], language → retorna job_id
GET
/status/{job_id}
Polling do progresso do job em lote
TTS — Síntese de Voz (Piper, Kokoro & Coqui)
GET
/tts/health
Status do serviço TTS
GET
/tts/engines
Motores e vozes disponíveis: { piper: { voices }, coqui: { speakers } }
GET
/tts/voices
Speakers Coqui (retrocompat.)
GET
/tts/ollama-status
Verifica se o Ollama está rodando localmente → {"available": bool}
POST
/tts/synthesize
JSON: text, engine ("piper"|"kokoro"|"coqui"), voice, language (coqui), preprocess (bool, padrão false — normaliza R$, %, números e siglas em texto por extenso) → audio/wav
Exemplos — curl
# Status do serviço
curl http://192.168.30.22:9000/health
# Listar motores e vozes disponíveis
curl http://192.168.30.22:9000/tts/engines
# ── KOKORO — recomendado para PT-BR ─────────────────────────────────────────
# Síntese simples com Kokoro (voz masculina pt-BR, ~1-4 s)
curl -X POST http://192.168.30.22:9000/tts/synthesize \
-H "Content-Type: application/json" \
-d '{"text":"O dashboard mostra crescimento de doze por cento.",
"engine":"kokoro","voice":"pm_alex"}' \
--output audio.wav
# Kokoro COM normalização de texto (R$, %, números → por extenso) — USE SEMPRE
# preprocess:true converte automaticamente antes de sintetizar (adiciona < 5ms)
curl -X POST http://192.168.30.22:9000/tts/synthesize \
-H "Content-Type: application/json" \
-d '{"text":"Receita de R$1.239.336 com crescimento de 15% e gap de (-R$117.591).",
"engine":"kokoro","voice":"pm_alex","preprocess":true}' \
--output audio.wav
# Resultado esperado do texto acima após normalização:
# "Receita de um milhão, duzentos e trinta e nove mil, trezentos e trinta e seis reais
# com crescimento de quinze por cento e gap de menos cento e dezessete mil,
# quinhentos e noventa e um reais."
# Vozes Kokoro disponíveis (PT-BR)
# pm_alex → Alex (masculino) — padrão recomendado
# pm_santa → Santa (masculino)
# pf_dora → Dora (feminino)
# ── PIPER — mais rápido (<1 s), qualidade menor ──────────────────────────────
curl -X POST http://192.168.30.22:9000/tts/synthesize \
-H "Content-Type: application/json" \
-d '{"text":"Receita de R$117.591 com crescimento de 15%.",
"engine":"piper","voice":"pt_BR-faber-medium","preprocess":true}' \
--output audio_piper.wav
# ── TRANSCRIÇÃO (Whisper) ────────────────────────────────────────────────────
curl -X POST http://192.168.30.22:9000/transcribe \
-F "file=@reuniao.mp3" -F "language=pt"
Integração Python — ActiveBI / Odoo (malta)
O ActiveBI roda em malta (192.168.30.20) na mesma rede do naxos. Use a URL direta para evitar overhead do nginx. O padrão recomendado é Kokoro + pm_alex + preprocess=True — converte automaticamente R$, % e números antes da síntese.
import requests
TTS_URL = "http://192.168.30.22:9000/tts/synthesize"
def gerar_audio_analise(
texto: str,
caminho_wav: str,
engine: str = "kokoro", # kokoro = melhor qualidade PT-BR (~1-4 s)
voice: str = "pm_alex", # Alex masculino PT-BR — padrão recomendado
preprocess: bool = True, # normaliza R$, %, números → por extenso
) -> bool:
"""
Converte texto de análise de dashboard em WAV.
preprocess=True (padrão): converte automaticamente valores como
R$1.239.336 → "um milhão, duzentos e trinta e nove mil reais"
15% → "quinze por cento"
(-R$117k) → "menos cento e dezessete mil reais"
Adiciona menos de 5ms ao tempo de resposta.
Retorna True se gerou, False em caso de falha (TTS é complementar).
"""
body = {
"text": texto[:4000],
"engine": engine,
"voice": voice,
"preprocess": preprocess,
}
try:
resp = requests.post(TTS_URL, json=body, timeout=30)
resp.raise_for_status()
with open(caminho_wav, "wb") as f:
f.write(resp.content)
return True
except requests.RequestException as exc:
import logging
logging.warning("TTS falhou: %s", exc)
return False
# ── Uso básico ────────────────────────────────────────────────────────────────
# ok = gerar_audio_analise(analise_ia, "/tmp/dashboard_q1.wav")
# ── Vozes alternativas ────────────────────────────────────────────────────────
# gerar_audio_analise(texto, wav, voice="pf_dora") # feminino PT-BR
# gerar_audio_analise(texto, wav, voice="pm_santa") # masculino PT-BR alternativo
# gerar_audio_analise(texto, wav, engine="piper", # mais rápido (<1 s)
# voice="pt_BR-faber-medium")
# ── Texto de exemplo com normalização ────────────────────────────────────────
# texto = ("Receita de R$1.239.336, crescimento de 15%, "
# "gap de (-R$117.591). Vendedores: ex.: João e Maria.")
# gerar_audio_analise(texto, "/tmp/relatorio.wav")
# → sintetiza: "Receita de um milhão, duzentos e trinta e nove mil,
# trezentos e trinta e seis reais, crescimento de quinze por cento,
# gap de menos cento e dezessete mil, quinhentos e noventa e um reais.
# Vendedores: por exemplo João e Maria."
Informações operacionais
Modelo Whisperggml-small.bin — 466 MB — 99 idiomas
Motor PiperVITS/ONNX — vozes ~30-63 MB — síntese < 1 s/frase
Motor KokoroONNX 82M — 54 vozes multilíngues — síntese 1-4 s/frase
Motor CoquiXTTS-v2 — multilíngue — ~1.8 GB — síntese ~10-30 s/frase
HardwareCPU only (sem GPU)
Workers1 processo uvicorn (TTS não suporta multiprocessing)
Limite de texto4 000 caracteres por chamada ao /tts/synthesize
Normalização (preprocess)regex + num2words — converte R$, %, números, siglas — < 5ms, sem dependências externas
Padrão recomendadoengine=kokoro · voice=pm_alex · preprocess=true
Acesso externoBloqueado via nginx (deny all fora de 192.168.30.x)