Uma transcrição diz o que foi dito. Numa entrevista, reunião ou podcast, falta a outra metade: saber quem o disse. Na investigação da fala, este problema chama-se diarização de oradores. Desde as versões iPhone 1.8.5, Mac App Store 1.3.2 e Mac por descarga direta 1.5.1, o Whisper Notes executa a diarização inteiramente no dispositivo.
Neste artigo explicamos como funciona, mostramos os resultados do nosso benchmark face a uma referência gerada na cloud e descrevemos o único caso de falha que não conseguimos eliminar com engenharia — e o que fizemos em alternativa.
O que faz
Abra uma nota — uma gravação, um ficheiro de áudio ou vídeo importado, ou uma gravação de reunião — e carregue no botão dos oradores. Alguns segundos depois, cada parágrafo apresenta uma etiqueta de orador e uma marca temporal.
Etiquetas de orador no Mac e no iPhone. Tocar numa frase leva a reprodução até esse momento.
As etiquetas começam por Orador 1 e Orador 2. Ao mudar o nome de uma, toda a transcrição é atualizada. Toque em qualquer frase para levar a reprodução de áudio ao momento exato; assim é simples confirmar uma citação pela voz original.
Mudar o nome de um orador atualiza todos os parágrafos da nota.
Nas gravações de reuniões, a identificação dos oradores é executada automaticamente quando a chamada termina; pode ser desativada nas Definições. As etiquetas mantêm-se na exportação: Copiar transcrição com oradores leva-as para a área de transferência, e os ficheiros SRT e VTT incluem-nas nas legendas.
A diarização trabalha com vozes, não com palavras. Por isso, comporta-se da mesma forma nas mais de 100 línguas que a app transcreve.
Um modelo de 19 MB no Neural Engine
A diarização responde a «quem falou e quando» em três passos. Primeiro, divide o áudio em segmentos com voz. Depois, transforma cada segmento numa impressão vocal: um vetor compacto que descreve a voz, e não as palavras. Por fim, agrupa as impressões; os segmentos no mesmo grupo recebem a mesma etiqueta.
O Whisper Notes usa o pipeline community-1 da pyannote, convertido para Core ML para que ambas as fases sejam executadas no Neural Engine. A transferência única ocupa 19 MB, e uma conversa de 5.7 minutos demora 2 a 4 segundos num Mac da série M.
Áudio → segmentos com voz → impressões vocais → grupos → etiquetas
Todos os passos são executados no dispositivo.
Isto importa ainda mais na diarização do que na transcrição. Uma impressão vocal é um dado biométrico: identifica uma pessoa como uma impressão digital. Com processamento local, as impressões vocais suas, dos seus colegas e das pessoas que entrevista são calculadas, agrupadas e eliminadas no dispositivo. Nunca são enviadas para lado nenhum.
O que medimos
Mantemos um benchmark fixo de dois ficheiros para a diarização. A referência vem de um serviço cloud de ASR e diarização (ElevenLabs) e foi verificada manualmente. A pontuação atribui cada 10 ms de fala a um orador e escolhe a melhor correspondência entre o resultado e a referência. Dois ficheiros formam uma amostra pequena: tratamos estes números como indicativos, não definitivos.
O primeiro ficheiro representa o caso habitual: um podcast em inglês de cinco minutos, com duas vozes claramente diferentes. A maioria das entrevistas, dos podcasts e das reuniões a dois é assim.
| Podcast em inglês com dois oradores (5 min) | Resultado |
|---|---|
| Atribuição por frame (resolução de 10 ms) | 96.7% |
| Precisão por frase (aquilo que lê) | 99.1% |
| Tempo de processamento, Neural Engine da série M | 2–4 s |
Os 0.9% restantes correspondem a três oscilações nos limites das frases, num total de 3.4 segundos — à escala da resolução da própria referência. Neste tipo de material, o resultado no dispositivo corresponde ao serviço cloud que produziu a nossa referência.
O caso difícil
O segundo ficheiro é difícil de propósito: duas vozes masculinas semelhantes numa sala com reverberação e um apresentador que intervém 19 vezes, durante uma média de 2.3 segundos de cada vez. O convidado fala durante 272 segundos; o apresentador, 43. Este é o perfil acústico que faz falhar a diarização em qualquer idioma: vozes parecidas que alternam intervenções curtas.
Aqui, o agrupamento automático colapsa. As duas impressões vocais ficam tão próximas que o algoritmo as junta e atribui quase toda a conversa a uma só etiqueta. A gravação é, por acaso, um programa de entrevistas em chinês, o que nos permitiu testar a hipótese óbvia: um modelo especializado no idioma teria melhor desempenho. Comparámos num pipeline de CPU dois modelos de orador treinados especificamente com fala em chinês:
| Modelo | Podcast em inglês | Caso difícil* | Tempo (áudio de 5.7 min) |
|---|---|---|---|
| pyannote community-1 (nosso, Neural Engine) | 96.7% | 81–82% | 2–4 s |
| CAM++ (treinado em chinês, CPU) | 93.9% | 81.2% | 36–103 s |
| ERes2NetV2 (treinado em chinês, CPU) | — | 80.5% | 220–290 s |
* Atribuição por frame no ficheiro difícil com o número de oradores indicado. Sem essa informação, todos os modelos convergem para um único orador.
Ambos colapsam da mesma forma, com 10 a 100 vezes mais processamento. A dificuldade é acústica, não linguística — o limite está no que as representações vocais atuais conseguem distinguir, em qualquer idioma.
Isto excluiu a correção óbvia e apontou para outra: dar ao pipeline um dado que não consegue inferir — o número de pessoas na sala. Com o número indicado (uma opção do menu, de 2 a 6), o ficheiro difícil passa do colapso para 89% de precisão por frase. A deteção automática continua a ser a predefinição, porque acerta em material habitual.
Repetir a deteção com o número exato de oradores. O mesmo menu exporta SRT e VTT com as respetivas etiquetas.
Corrigir intervenções curtas
Com o número fixado, cerca de metade dos erros restantes estava em intervenções com menos de três segundos. Um excerto de dois segundos dá muito pouco sinal ao modelo de representação; em trocas rápidas, a sua impressão vocal também absorve parte da voz do orador seguinte.
Após o agrupamento, o pipeline volta por isso a analisar cada frase com menos de 3.5 segundos. Recalcula a impressão vocal com uma máscara exatamente sobre os frames dessa frase, compara-a com a âncora de cada orador — a média das suas intervenções mais longas — e só muda a etiqueta quando a diferença é decisiva. O modelo existente é reutilizado; não há outra transferência.
| Precisão por frase de ponta a ponta | Antes da correção | Depois |
|---|---|---|
| Caso difícil (número de oradores indicado) | 89.0% | 94.8% |
| Podcast em inglês (automático) | 98.5% | 99.1% |
O limiar é conservador: nos dois ficheiros, o corretor mudou 21 etiquetas sem introduzir novos erros.
Limitações
• As etiquetas aparecem quando a gravação termina, não durante a chamada. Se precisar de legendas em direto com o nome dos oradores enquanto a reunião decorre, um serviço cloud como o Otter ou o Notta é a ferramenta certa.
• Quando duas pessoas falam ao mesmo tempo, cada frase recebe apenas uma etiqueta.
• Vozes semelhantes continuam a ser difíceis. Os 94.8% no nosso ficheiro difícil são o limite atual com o número de oradores indicado, não um problema resolvido.
Disponibilidade
A identificação de oradores está incluída na compra única de $6.99, juntamente com os três motores de transcrição da app — Parakeet V3, Whisper Large V3 Turbo e SenseVoice — e edição local com IA. Não existe outro nível nem é preciso ter conta.
• iPhone: App Store, versão 1.8.5 ou posterior.
• Mac App Store: versão 1.3.2 ou posterior.
• Descarga direta para Mac (DMG): versão 1.5.1 ou posterior em whispernotes.app, com teste gratuito.
Para saber como funciona a gravação de reuniões, consulte o nosso artigo sobre transcrição offline de reuniões.