Você ainda está usando o Whisper pra transcrição no iOS? Precisamos conversar.
A Apple jogou uma bomba silenciosa na WWDC deste ano. Enquanto todo mundo falava de Apple Intelligence e os novos recursos de IA generativa, a empresa soltou uma API de reconhecimento de voz que, nos benchmarks, humilha o Whisper da OpenAI em velocidade e precisão. E o melhor: roda 100% no dispositivo, sem mandar um único byte pros servidores da Apple.
O nome é SpeechAnalyzer, e ele substitui o velho SFSpeechRecognizer que a gente usava (e sofria) desde o iOS 10.
Eu testei, comparei os números, conversei com devs que já migraram, e o veredito é claro: se você desenvolve pra iOS e precisa de transcrição, ignorar essa API é jogar performance no lixo. Vamos aos fatos.
O que é o SpeechAnalyzer e por que ele existe
O SpeechAnalyzer é a nova API de reconhecimento de fala da Apple, introduzida com o iOS 26 e macOS 26. Ele faz parte do framework Speech (sim, o mesmo de sempre) mas internamente é uma arquitetura completamente nova.
O antecessor, SFSpeechRecognizer, tinha problemas conhecidos:
- Limite de 1 minuto para transcrição contínua
- Por padrão, enviava áudio pros servidores da Apple (a menos que você ativasse
requiresOnDeviceRecognitionmanualmente) - Saída de texto sem pontuação e sem capitalização
- Precisão medíocre em ambientes com ruído
O SpeechAnalyzer resolve tudo isso. Sem limite de duração, processamento 100% local, saída com pontuação e capitalização automática, e uma precisão que faz o modelo anterior parecer brinquedo.
| Recurso | SFSpeechRecognizer | SpeechAnalyzer |
|---|---|---|
| Limite de duração | 1 minuto | Sem limite |
| Processamento | Servidor (padrão) | 100% on-device |
| Pontuação automática | Não | Sim |
| Capitalização | Não | Sim |
| Detecção de idioma | Manual | Automática |
| iOS mínimo | iOS 10 | iOS 26 |
Junto com o SpeechAnalyzer, a Apple também lançou o SpeechTranscriber, uma API complementar otimizada para transcrição de áudio longo (podcasts, reuniões, palestras). As duas compartilham o mesmo motor de reconhecimento por baixo.
Os benchmarks: números que falam por si
Aqui é onde a coisa fica interessante. O pessoal da Inscribe rodou benchmarks comparando o SpeechAnalyzer com vários tamanhos do Whisper no dataset LibriSpeech, que é o padrão da indústria pra avaliar reconhecimento de voz.
Word Error Rate (WER): quanto menor, melhor
| Motor | Fala Limpa | Fala com Ruído |
|---|---|---|
| SpeechAnalyzer | 2.12% | 4.56% |
| Whisper Small | 3.74% | 7.95% |
| Whisper Base | 5.42% | 12.51% |
| Whisper Tiny | 7.88% | 17.04% |
| SFSpeechRecognizer (antigo) | 9.02% | 15.8% |
Leia de novo: 2.12% de erro em fala limpa. O Whisper Small, que é o modelo que a maioria dos apps iOS usa, fica em 3.74%. O SpeechAnalyzer é quase duas vezes mais preciso.
Em fala com ruído, a diferença fica ainda mais brutal. 4.56% contra 7.95% do Whisper Small. Contra o antigo SFSpeechRecognizer? O SpeechAnalyzer corta o erro por 4x.
Velocidade de processamento
Todos os motores testados foram mais rápidos que tempo real num M2 Pro, mas a diferença de velocidade é gritante:
- SpeechAnalyzer: ~3x mais rápido que o Whisper Small
- Todos os motores testados rodam entre 12x e 40x mais rápido que tempo real
- O SpeechAnalyzer reduz o tempo de processamento em 55% comparado ao Whisper Large V3
Traduzindo: você transcreve 1 hora de áudio em menos de 2 minutos. No dispositivo. Sem internet.
Mas calma, não é tudo perfeito
Antes de sair migrando todo o seu código, existem limitações reais que você precisa conhecer.
Suporte a idiomas
Essa é a maior fraqueza. O SpeechAnalyzer suporta cerca de 30 locales, enquanto o Whisper cobre mais de 100 idiomas. Se o seu app atende mercados como tailandês, hindi ou swahili, o Whisper ainda é a única opção viável.
Para português brasileiro, a boa notícia: está na lista. Mas os benchmarks publicados até agora são todos em inglês, então a precisão real em pt-BR ainda precisa ser validada pela comunidade.
Sem vocabulário customizado
O antigo SFSpeechRecognizer permitia injetar termos específicos do seu domínio (nomes de produtos, jargão técnico, siglas). O SpeechAnalyzer não tem esse recurso. Se o seu app transcreve consultas médicas ou termos jurídicos, essa limitação pode ser um deal-breaker.
O WhisperKit, alternativa open-source da Argmax, mantém suporte a vocabulário customizado e pode ser a melhor escolha nesses cenários.
Código fechado e ciclo de atualizações
O SpeechAnalyzer é proprietário. Se você encontrar um bug, precisa abrir um ticket no Feedback Assistant e esperar a próxima atualização do iOS. Com o Whisper (ou WhisperKit), você pode debugar o modelo, trocar versões, e até contribuir com fixes no GitHub.
Requer iOS 26
Óbvio, mas precisa ser dito: se o seu app precisa rodar em iPhones mais antigos que não recebem o iOS 26, o SpeechAnalyzer simplesmente não existe pra você. O WhisperKit roda a partir do iOS 17.
SpeechAnalyzer vs WhisperKit vs Whisper: qual usar?
A Argmax publicou uma comparação independente usando o dataset earnings22 (áudio conversacional de calls de earnings, bem mais realista que o LibriSpeech):
| Métrica | SpeechAnalyzer | WhisperKit Base | WhisperKit Small |
|---|---|---|---|
| Word Error Rate | 14.0% | 15.2% | 12.8% |
| Velocidade (fator real-time) | 70x | 111x | Varia |
| Idiomas | ~10 | 100+ | 100+ |
| iOS mínimo | 26 | 17 | 17 |
| Código aberto | Não | Sim | Sim |
| Vocabulário custom | Não | Sim | Sim |
Repare que em áudio conversacional (mais realista que leitura em voz alta), o WhisperKit Small na verdade bate o SpeechAnalyzer em precisão. A escolha não é tão óbvia quanto os benchmarks do LibriSpeech sugerem.
Quando usar o SpeechAnalyzer
- Apps que precisam de transcrição rápida e genérica
- Projetos onde simplicidade de integração importa mais que flexibilidade
- Apps que já fazem parte do ecossistema Apple e querem zero dependências externas
- Quando privacidade total é requisito (nenhum dado sai do device)
Quando usar o WhisperKit
- Apps multilíngues (100 idiomas vs 10)
- Domínios especializados que precisam de vocabulário customizado
- Projetos que precisam suportar iOS 17+
- Quando você quer controle total sobre o modelo e atualizações
Quando usar o Whisper direto
- Backend de transcrição em servidor
- Quando você precisa do Whisper Large V3 pra máxima precisão
- Pipelines de processamento batch que não rodam em Apple Silicon
Como migrar do SFSpeechRecognizer pro SpeechAnalyzer
Se você já usa o SFSpeechRecognizer e quer migrar, o processo é relativamente direto. A Apple manteve conceitos parecidos, mas a API mudou bastante na prática.
O código antigo (SFSpeechRecognizer)
import Speech
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "pt-BR"))!
let request = SFSpeechURLRecognitionRequest(url: audioFileURL)
request.requiresOnDeviceRecognition = true
recognizer.recognitionTask(with: request) { result, error in
guard let result = result else { return }
print(result.bestTranscription.formattedString)
}
Repare que precisávamos setar requiresOnDeviceRecognition = true explicitamente. Sem isso, o áudio ia direto pros servidores da Apple. Quantos apps no mundo real esquecem essa flag? Provavelmente a maioria.
O código novo (SpeechAnalyzer)
import Speech
let analyzer = SpeechAnalyzer()
let request = SpeechAnalyzer.Request(audioSource: .file(audioFileURL))
request.locale = Locale(identifier: "pt-BR")
Task {
for try await transcript in analyzer.transcribe(request) {
print(transcript.text) // Já vem com pontuação e capitalização
}
analyzer.finalizeAndFinishThroughEndOfInput()
}
A API nova usa async/await nativamente, o que já é uma vitória enorme pra quem sofria com os callbacks aninhados do modelo antigo. E o processamento on-device é o padrão, sem flag nenhuma. Privacidade by default, como deveria ser.
Transcrição em tempo real com microfone
Pra quem precisa de transcrição ao vivo (ditado, legendas, acessibilidade), a API também suporta streaming direto do microfone:
import Speech
import AVFoundation
let analyzer = SpeechAnalyzer()
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.record, mode: .measurement)
try audioSession.setActive(true)
let request = SpeechAnalyzer.Request(audioSource: .microphone)
request.locale = Locale(identifier: "pt-BR")
request.addsPunctuation = true
Task {
for try await partial in analyzer.transcribe(request) {
// partial.text atualiza em tempo real conforme o usuário fala
updateUI(with: partial.text)
}
}
// Quando o usuário parar de falar:
analyzer.finalizeAndFinishThroughEndOfInput()
Armadilhas da migração
Um detalhe crítico que muitos devs estão descobrindo da pior forma: você precisa chamar finalizeAndFinishThroughEndOfInput() no final da transcrição. Se esquecer, o await fica pendurado pra sempre. Não tem timeout, não tem erro. Só trava. O Xcode não vai te avisar, o compilador não reclama. Você só descobre quando o app congela em produção.
Outra pegadinha: o modelo não vem pré-instalado. Na primeira execução, o sistema baixa o modelo silenciosamente. Isso significa que a primeira transcrição pode demorar mais do que o esperado. A Apple não expõe uma API pra pré-baixar o modelo, então a melhor estratégia é fazer uma transcrição dummy no primeiro launch do app.
Por fim, se o seu app usa SFSpeechRecognizer com resultados parciais pra mostrar texto “ao vivo” enquanto o usuário fala, a migração é quase 1:1. A diferença é que os resultados parciais do SpeechAnalyzer já vêm pontuados, então você não precisa mais daquela lógica de “adicionar pontuação depois”.
O que os devs estão dizendo
A thread no Hacker News sobre esses benchmarks revelou sentimentos mistos.
O consenso positivo: a precisão em inglês limpo é impressionante, e rodar on-device sem configuração é um atrativo enorme pra apps simples. Ninguém discute que é um salto gigante em relação ao SFSpeechRecognizer.
As críticas? Concentram-se em três pontos:
1. O benchmark usa modelos antigos do Whisper. A comparação é contra Whisper Small, Base e Tiny, versões de 2022. Modelos mais recentes como Whisper Large V3 Turbo, Parakeet V2/V3 da Nvidia, e o MOSS-Transcribe-Diarize não foram incluídos. É como comparar um carro 2026 com modelos 2022 e declarar vitória.
2. Sotaques não-americanos continuam problemáticos. Um dev australiano relatou que precisa “americanizar” a pronúncia pra conseguir reconhecimento decente. Um texano reportou 25% de falha com o Siri. Se a Apple não resolve isso no próprio assistente virtual, quanto confiança temos no SpeechAnalyzer pra sotaques diversos?
3. O teste usa leitura em voz alta, não fala real. O LibriSpeech é um dataset de audiobooks. Fala real tem pausas, gírias, sobreposição, barulho de fundo. Os benchmarks da Argmax com áudio conversacional mostram uma história diferente: a vantagem do SpeechAnalyzer praticamente desaparece.
Cenários práticos: onde cada solução brilha
Vamos sair da teoria e falar de casos de uso reais.
App de notas por voz (tipo Otter.ai): SpeechAnalyzer é perfeito. Transcrição rápida, on-device, sem custo de servidor. O usuário grava, o texto aparece quase instantaneamente. Se o app é só em inglês e português, você não precisa de mais nada.
App médico com termos especializados: WhisperKit. Você vai precisar de vocabulário customizado pra termos como “hipotireoidismo” ou “ceftriaxona” que nenhum modelo genérico acerta de primeira. O SpeechAnalyzer vai trocar “ceftriaxona” por “sef tri axo na” e você vai perder a confiança do usuário.
Plataforma de podcast com transcrição automática: Depende. Se os podcasts são em inglês, o SpeechAnalyzer no device funciona bem pra transcrição local. Mas se você precisa processar centenas de episódios em batch no servidor, Whisper Large V3 no backend é mais prático.
App de acessibilidade com legendas ao vivo: SpeechAnalyzer, sem dúvida. A latência baixa e o processamento local são essenciais aqui. Mandar áudio pra um servidor e esperar a resposta volta seria inaceitável pra quem depende de legendas em tempo real.
App multilíngue (10+ idiomas): WhisperKit ou Whisper direto. Com suporte a 100+ idiomas, não tem competição. O SpeechAnalyzer cobre cerca de 10 a 30 locales dependendo da versão do OS, e pra muitos mercados emergentes simplesmente não existe suporte.
O impacto real no ecossistema
Se você é dev iOS e trabalha com qualquer tipo de transcrição, ditado, acessibilidade, ou interface por voz, o SpeechAnalyzer é relevante pra você. Ponto.
A combinação de processamento on-device, zero configuração, e precisão competitiva faz dele a escolha padrão pra novos projetos iOS 26+. Você não precisa mais carregar modelos Whisper no bundle do app, não precisa gerenciar downloads de modelos, não precisa se preocupar com privacidade de dados de áudio.
Pra quem constrói apps que lidam com dados sensíveis (saúde, finanças, jurídico), o fato de nenhum áudio sair do device é um argumento de venda poderoso. Em tempos de LGPD e GDPR, “seus dados nunca saem do seu iPhone” é o tipo de frase que faz compliance officers sorrirem.
Para empresas que precisam de transcrição em domínios especializados (medicina, direito, finanças), o WhisperKit continua sendo a melhor opção pelo suporte a vocabulário customizado. Mas pra 80% dos casos de uso? O SpeechAnalyzer resolve sem dependência externa nenhuma.
E pro ecossistema como um todo? O SpeechAnalyzer pressiona a OpenAI e a comunidade open-source a melhorar. Quando uma API nativa “grátis” bate seu modelo mais popular, você precisa responder. Já estamos vendo o Whisper V4 em desenvolvimento, e modelos como Parakeet da Nvidia e Voxtral evoluindo rápido pra não perder relevância.
A corrida por transcrição on-device está esquentando. E pela primeira vez em anos, a Apple está liderando em vez de correndo atrás. A pergunta que fica: quanto tempo até o Google lançar um equivalente pro Android?
Recursos e links úteis
Se você quer se aprofundar, aqui estão os melhores pontos de partida:
- Benchmark completo: SpeechAnalyzer vs Whisper (Inscribe)
- Comparação WhisperKit vs SpeechAnalyzer (Argmax)
- Documentação oficial da Apple
- WhisperKit no GitHub (alternativa open-source)
A bola agora está com a OpenAI. Whisper V4, alguém?













