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

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:9000
Recomendado para serviços internos (ex: ActiveBI/Odoo em malta)
Via domínio (nginx malta)
https://whisper.consultline.com.br
Bloqueado 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)