InícioBlog → Como gravar áudio no navegador e transformá-lo em texto

Como gravar áudio no navegador e transformá-lo em texto

Publicado em 2026-08-20 · 5 min de leitura

A entrada por voz compensa onde digitar é lento: chamados pelo celular, comentários em um campo, ditar uma descrição longa. O navegador grava áudio com recursos nativos, e a transcrição é uma requisição a mais — feita do seu servidor, não da página.

Gravar no navegador

O MediaRecorder nativo entrega um arquivo pronto, sem bibliotecas:

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const rec = new MediaRecorder(stream, { mimeType: "audio/webm" });
const chunks = [];

rec.ondataavailable = e => chunks.push(e.data);
rec.onstop = async () => {
  const blob = new Blob(chunks, { type: "audio/webm" });
  const form = new FormData();
  form.append("file", blob, "voice.webm");
  const r = await fetch("/api/transcribe", { method: "POST", body: form });
  document.querySelector("#out").value = (await r.json()).text;
};

rec.start();
setTimeout(() => rec.stop(), 15000);

webm é aceito diretamente, então não há nada a converter.

Por que a chave nunca fica no navegador

É tentador postar o arquivo direto da página, mas aí a chave fica no código que qualquer um lê. Em uma hora ela é encontrada; em um dia o saldo acabou.

A forma correta é uma camada fina no seu servidor: o navegador envia para você, você confere usuário e cota, e só o servidor fala com a API usando a chave.

A camada no servidor

import express from "express";
import multer from "multer";
import OpenAI from "openai";
import { toFile } from "openai/uploads";

const upload = multer({ limits: { fileSize: 25 * 1024 * 1024 } });
const client = new OpenAI({ baseURL: "https://voicesscribe.com/v1", apiKey: process.env.VS_KEY });

express()
  .post("/api/transcribe", upload.single("file"), async (req, res) => {
    const file = await toFile(req.file.buffer, "voice.webm");
    const r = await client.audio.transcriptions.create({ model: "whisper-1", file });
    res.json({ text: r.text });
  })
  .listen(3000);

É aqui também que se limita a duração da gravação e o número de requisições por usuário — caso contrário, o primeiro robô que achar o formulário o transforma na sua despesa.

Limitações do navegador

Teste com as suas próprias gravações. O cadastro leva um minuto e os minutos gratuitos bastam para avaliar a qualidade.

Obter uma chave de API grátis

Perguntas frequentes

Posso chamar a API direto do navegador?

Tecnicamente sim, mas a chave fica visível para todo visitante. Sempre coloque uma camada no seu próprio servidor.

Preciso converter o webm?

Não, o formato é aceito como está. Basta enviar um nome de arquivo com a extensão correta.

Dá para mostrar o texto enquanto a pessoa fala?

Não há saída em fluxo: o texto volta depois do processamento. Para dar sensação de imediatismo, corte a gravação em trechos curtos e envie em sequência.

E o limite de tamanho?

25 MB por arquivo, o que em webm significa horas de fala — não é restrição prática para entrada por voz.

Leitura relacionada