API REST que recebe arquivos de áudio de aplicativos Expo e converte em texto usando Google Cloud Speech API e OpenAI Whisper.
- ✅ Conversão de áudio para texto
- ✅ Suporte a múltiplos formatos: WAV, MP3, M4A, OGG
- ✅ Integração com Google Cloud Speech API
- ✅ Integração com OpenAI Whisper
- ✅ API REST simples e intuitiva
- ✅ Suporte a múltiplos idiomas (pt-BR, en-US, es-ES)
- ✅ Compatível com aplicativos Expo
- Node.js 16+
- npm ou yarn
- FFmpeg instalado no sistema
- Conta Google Cloud (opcional)
- API Key OpenAI (opcional)
- Clone o repositório:
git clone <seu-repositorio> cd ApiTalk
- Instale as dependências:
npm install
- Configure as variáveis de ambiente:
# Copie o arquivo de exemplo cp .env.example .env # Edite o arquivo .env com suas configurações
- Configure os serviços de Speech-to-Text (pelo menos um):
- Crie um projeto no Google Cloud Console
- Ative a Speech-to-Text API
- Crie uma service account e baixe o arquivo JSON
- Configure o caminho no .env:
GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account.json
- Obtenha sua API key em https://platform.openai.com/
- Configure no .env:
OPENAI_API_KEY=your_api_key
- Inicie o servidor de desenvolvimento:
npm run dev
- O servidor estará disponível em:
http://localhost:3000
Converte áudio em texto.
Parâmetros:
audio(file): Arquivo de áudio (WAV, MP3, M4A, OGG)language(string, opcional): Idioma para transcrição (pt-BR, en-US, es-ES)service(string, opcional): Serviço preferido (google, openai, auto)
Exemplo de uso com curl:
curl -X POST \ -F "audio=@exemplo.wav" \ -F "language=pt-BR" \ http://localhost:3000/api/v1/audio/transcribe
Resposta de sucesso:
{
"success": true,
"data": {
"transcription": "Texto transcrito do áudio",
"confidence": 0.95,
"language": "pt-BR",
"service": "google",
"fileInfo": {
"size": 1024000,
"format": "wav",
"name": "exemplo.wav"
},
"processingTime": 2500,
"processedAt": "2025年09月22日T12:00:00.000Z"
}
}Verifica a saúde da API.
Lista os serviços disponíveis.
Exemplo de código para usar a API em um app Expo:
import { Audio } from 'expo-av'; // Função para transcrever áudio async function transcribeAudio(audioUri) { const formData = new FormData(); formData.append('audio', { uri: audioUri, type: 'audio/m4a', name: 'recording.m4a', }); const response = await fetch('http://localhost:3000/api/v1/audio/transcribe', { method: 'POST', body: formData, headers: { 'Content-Type': 'multipart/form-data', }, }); return response.json(); }
ApiTalk/
├── src/
│ ├── controllers/ # Controladores da API
│ ├── services/ # Serviços de conversão de áudio
│ ├── middlewares/ # Middlewares personalizados
│ ├── utils/ # Utilitários e helpers
│ ├── config/ # Configurações da aplicação
│ └── routes/ # Definições de rotas
├── uploads/ # Diretório temporário para uploads
├── .cursor/rules/ # Regras do Cursor
├── package.json # Dependências e scripts
└── server.js # Ponto de entrada da aplicação
npm start- Inicia o servidor em produçãonpm run dev- Inicia o servidor com nodemon (desenvolvimento)
Crie um arquivo .env na raiz do projeto:
# Configurações do Servidor PORT=3000 NODE_ENV=development # Serviços de Speech-to-Text GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account.json OPENAI_API_KEY=your_openai_api_key # Configurações de Upload MAX_FILE_SIZE=26214400 UPLOAD_DIR=./uploads # CORS ALLOWED_ORIGINS=http://localhost:19006,exp://localhost:19000
A API retorna erros estruturados:
{
"success": false,
"error": {
"code": "INVALID_AUDIO_FORMAT",
"message": "Formato de áudio não suportado",
"details": "Formatos aceitos: WAV, MP3, M4A, OGG"
}
}ISC
Contribuições são bem-vindas! Abra uma issue ou envie um pull request.