Vozes recomendadas para a API Web Speech
Este repositório faz parte de um projeto maior, que visa identificar as melhores práticas para implementar um recurso de leitura em voz alta em aplicativos de leitura.
Com centenas de vozes disponíveis por padrão em vários navegadores e sistemas operacionais, pode ser complicado para os desenvolvedores fornecer padrões sensatos e uma lista selecionada de vozes.
Com foco na seleção de vozes, o objetivo deste projeto é documentar vozes de maior qualidade disponíveis em diversas plataformas e fornecer uma maneira fácil de implementar essas recomendações usando arquivos de configuração JSON.
Casos de uso
- Fornecendo a melhor voz padrão possível por idioma
- Exibindo uma lista ordenada de vozes, com base na qualidade
- Exibindo nomes de voz fáceis de usar
- Filtrando vozes recomendadas por sexo e idade (adulto x criança)
- Filtrando novidades e vozes de baixa qualidade
- Visualizando uma voz com uma expressão de teste
Demonstração
Uma demonstração ao vivo baseada no projeto Readium Speech está disponível.
Esta demonstração implementa as práticas recomendadas para seleção de voz junto com os dados deste repositório.
Lista de idiomas suportados
O objetivo deste projeto é oferecer suporte a todos os 43 idiomas disponíveis no Windows e macOS.
Em seu estado atual, abrange 43 idiomas:
- Árabe (Argélia, Bahrein, Egito, Iraque, Jordânia, Kuwait, Líbano, Líbia, Marrocos, Omã, Catar, Arábia Saudita, Síria, Tunísia, Emirados Árabes Unidos, Iêmen)
- Basco
- Bengali (Índia e Bangladesh)
- Bhojpuri
- búlgaro
- catalão
- Chinês:
- Chinês mandarim (China continental, Taiwan)
- Wu chinês (também conhecido como "Xangainês")
- Yue Chinês (também conhecido como "Cantonês")
- croata
- Tcheco
- dinamarquês
- Holandês (Holanda e Bélgica)
- Inglês (Estados Unidos, Reino Unido, Austrália, Canadá, Hong Kong, Índia, Irlanda, Quênia, Nova Zelândia, Nigéria, Escócia, Cingapura, África do Sul e Tanzânia)
- finlandês
- Francês (França, Canadá, Bélgica e Suíça)
- Galego
- Alemão (Alemanha, Áustria e Suíça)
- grego
- hebraico
- hindi
- húngaro
- indonésio
- italiano
- japonês
- Kannada
- coreano
- malaio
- Marathi
- norueguês
- persa
- polonês
- Português (Portugal e Brasil)
- romeno
- russo
- Eslovaco
- esloveno
- Espanhol (Espanha, Argentina, Bolívia, Chile, Colômbia, Costa Rica, Cuba, República Dominicana, Equador, El Salvador, Guiné Equatorial, Guatemala, Honduras, México, Nicarágua, Panamá, Paraguai, Peru, Porto Rico, Estados Unidos, Uruguai e Venezuela)
- sueco
- Tamil (Índia, Sri Lanka, Malásia e Singapura)
- Telugu
- Tailandês
- turco
- ucraniano
- vietnamita
Lista de vozes para filtrar
No outro extremo do espectro, este projeto também identifica uma série de vozes que devem ser filtradas de um componente seletor de voz.
Alguns deles são prejudiciais à experiência geral de leitura, enquanto outros têm qualidade muito baixa em plataformas onde estão disponíveis melhores opções pré-carregadas.
- Vozes inovadoras (dispositivos Apple)
- Vozes de qualidade muito baixa (dispositivos Apple e Chrome OS)
Princípios orientadores
- Cada lista de voz é ordenada e destinada a fornecer uma experiência auditiva ideal em todos os navegadores/sistemas operacionais/idiomas cobertos por este projeto.
- Mas cada lista também inclui opções padrão, para garantir que sempre haja algo confiável em que se apoiar.
- Com esses dois objetivos em mente, as vozes de qualidade superior são listadas no topo da lista, enquanto as vozes de qualidade inferior ou especializadas são listadas na parte inferior.
- O número de vozes pode parecer impressionante (mais de 110 vozes somente em inglês), mas na prática, apenas algumas delas estarão disponíveis para os usuários em cada um de seus dispositivos.
- Os nomes de voz retornados pela Web Speech API dificilmente são fáceis de usar, por isso esta lista fornece nomes alternativos que geralmente incluem um primeiro nome (ou gênero) junto com a região associada à voz.
- Sempre que possível, tentarei incluir uma boa combinação de opções padrão e de alta qualidade para ambos os sexos.
- Mas a lista tem que ser priorizada de alguma forma, as vozes femininas estão atualmente listadas acima das vozes masculinas. Uma vez que o género associado a cada voz é documentado, isto permite aos implementadores re-priorizar/filtrar a lista com base nestes critérios.
- As variantes regionais também são agrupadas em uma única lista, em vez de separadas propositalmente em seus próprios arquivos. Em alguns dispositivos, apenas duas ou três vozes podem estar disponíveis e separar as variantes regionais não faria muito sentido.
- Mas as variantes regionais devem ser priorizadas de alguma forma na lista. Por enquanto, as regiões com as melhores seleções de vozes estão listadas acima, mas é altamente recomendável que os implementadores considerem as preferências regionais do usuário.
Sintaxe
Um esquema JSON está disponível para validação ou potenciais contribuidores interessados em abrir um PR para novos idiomas ou adições de voz.
Rótulo
label
é necessário para cada voz recomendada e fornece um rótulo amigável para cada voz.
Essa string está localizada para o idioma de destino e geralmente contém as seguintes informações:
- Nome (se disponível)
- Gênero (quando falta o primeiro nome)
- País/região
Exemplo 1: vozes Microsoft Natural
Embora os nomes documentados pela Microsoft para suas vozes naturais sejam facilmente compreensíveis, eles tendem a ser muito longos e estão todos localizados em inglês.
{
"label" : " Isabella (Italia) " ,
"name" : " Microsoft Isabella Online (Natural) - Italian (Italy) " ,
"language" : " it-IT "
}
Exemplo 2: vozes do Chrome OS
O Chrome OS oferece uma série de vozes de alta qualidade por meio de seus subsistemas Android, mas elas vêm com alguns dos piores nomes possíveis para o usuário final.
{
"label" : " Female voice 1 (US) " ,
"name" : " Android Speech Recognition and Synthesis from Google en-us-x-tpc-network " ,
"language" : " en-US "
}
Nomes
name
é obrigatório para cada voz recomendada e é usado como identificador principal para vozes neste projeto.
Os nomes são geralmente estáveis em todos os navegadores, o que significa que, para a maioria das vozes, uma única string é suficiente.
Mas, infelizmente, existem alguns valores discrepantes: vozes do Android, iOS, iPadOS e macOS.
Para essas vozes, pelo menos uma parte da string é frequentemente localizada, a nomenclatura pode ser inconsistente entre navegadores e pode mudar dependendo do número de variantes instaladas.
Por causa disso, cada lista também pode conter as seguintes propriedades:
-
altNames
com uma série de strings alternativas para uma determinada voz - e
localizedName
que identifica o padrão de string usado para localizar essas vozes
Exemplo 3: versão alternativa de uma voz pré-carregada da Apple
{
"label" : " Samantha (US) " ,
"name" : " Samantha " ,
"localizedName" : " apple " ,
"altNames" : [
" Samantha (Enhanced) " ,
" Samantha (English (United States)) "
],
"language" : " en-US "
}
Idiomas
language
é necessário para cada voz recomendada.
Ele contém uma etiqueta de idioma BCP 47 onde um código de idioma de duas letras em letras minúsculas é seguido por um código de país de duas letras em letras maiúsculas.
Os códigos de idioma e país são separados por um hífen (-).
Algumas vozes também são capazes de lidar com outro idioma, por exemplo, uma voz em espanhol para os Estados Unidos também pode ser capaz de lidar com o inglês.
Por esse motivo, uma propriedade additionalLanguages
também está disponível, embora raramente seja usada no momento.
Ele contém uma lista de idiomas usando apenas códigos de duas letras, sem subtag.
Algumas vozes totalmente novas da Microsoft também são capazes de produzir resultados multilíngues. A mudança de idioma não é suportada no meio de uma frase, mas a saída parece capaz de detectar automaticamente o idioma de cada frase e adotar-se de acordo.
Para suportar isso, a saída pode mudar automaticamente para uma voz diferente no processo.
Essas vozes são identificadas usando o booleano multiLingual
.
Exemplo 4: Voz com saída multilíngue
{
"label" : " Emma (US) " ,
"name" : " Microsoft EmmaMultilingual Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"multiLingual" : true
}
Exemplo 5: Voz capaz de lidar com um idioma secundário
{
"label" : " Sylvie (Canada) " ,
"name" : " Microsoft Sylvie Online (Natural) - French (Canada) " ,
"language" : " fr-CA " ,
"otherLanguages" : [
" en "
]
}
Vozes de gênero e crianças
gender
é uma propriedade opcional para cada voz, que documenta o gênero associado a cada voz.
Os seguintes valores são suportados: female
, male
ou neutral
.
children
também é opcional e identifica as vozes das crianças usando um booleano.
Exemplo 6: Voz de crianças do sexo feminino
{
"label" : " Ana (US) " ,
"name" : " Microsoft Ana Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"gender" : " female " ,
"children" : true
}
Qualidade
quality
é uma propriedade opcional para cada voz, que documenta a qualidade das diversas variantes de uma voz.
Os seguintes valores são suportados:
- muito alto
- Qualidade de síntese de fala muito alta, quase indistinguível por humanos
- alto
- Alta qualidade de síntese de voz semelhante à humana
- normal
- Qualidade normal de síntese de fala
- baixo
- Qualidade de síntese de fala baixa e não humana
- muito baixo
- Qualidade de síntese de fala muito baixa, mas ainda inteligível
Exemplo 7: Uma voz da Apple disponível em três variantes de qualidade
{
"label" : " Ava (US) " ,
"name" : " Ava " ,
"note" : " This voice can be installed on all Apple devices and offers three variants. Like all voices that can be installed on Apple devices, it suffers from inconsistent naming due to localization. " ,
"altNames" : [
" Ava (Premium) " ,
" Ava (Enhanced) " ,
" Ava (English (United States)) " ,
],
"language" : " en-US " ,
"gender" : " female " ,
"quality" : [
" low " ,
" normal " ,
" high "
],
"rate" : 1 ,
"pitch" : 1 ,
"os" : [
" macOS " ,
" iOS " ,
" iPadOS "
]
}
SO e navegador
Tanto os
quanto browser
são propriedades opcionais. Eles são usados para indicar em quais sistemas operacionais e navegadores uma voz está disponível.
Essas duas propriedades devem ser interpretadas separadamente e não como uma combinação.
Exemplo 8: Uma voz da Microsoft disponível no Edge e no Windows
{
"label" : " Denise (France) " ,
"name" : " Microsoft Denise Online (Natural) - French (France) " ,
"note" : " This voice is preloaded in Edge on desktop. In other browsers, it requires the user to run Windows 11 and install the voice pack. " ,
"language" : " fr-FR " ,
"gender" : " female " ,
"os" : [
" Windows "
],
"browser" : [
" Edge "
]
}
Além disso, preloaded
indica se a voz está pré-carregada em todos os sistemas operacionais e navegadores identificados.
Com a abordagem atual, não é possível indicar que uma voz está disponível no Chrome e no Windows, mas requer um download no Windows, por exemplo.
Exemplo 9: uma voz do Google pré-carregada no Chrome Desktop
{
"label" : " Google female voice (UK) " ,
"name" : " Google UK English Female " ,
"language" : " en-GB " ,
"gender" : " female " ,
"browser" : [
" ChromeDesktop "
],
"preloaded" : true
}
Velocidade e tom da fala
Ao usar a Web Speech API, SpeechSynthesisUtterance
oferece suporte a valores opcionais para:
-
rate
para controlar a velocidade da fala - e
pitch
para controlar o pitch
Cada voz documentada neste repositório oferece suporte às seguintes propriedades opcionais:
-
pitchControl
é um booleano cujo padrão é true
e indica se uma voz pode ser controlada pelo tom -
rate
é um número inteiro entre 0,1 e 10 cujo padrão é 1 e fornece uma taxa de fala padrão recomendada para cada voz -
pitch
é um número inteiro entre 0 e 2 cujo padrão é 1 e fornece um pitch padrão recomendado para cada voz
Exemplo 10: Microsoft Voice onde o tom não pode ser ajustado
{
"label" : " Ana (US) " ,
"name" : " Microsoft Ana Online (Natural) - English (United States) " ,
"language" : " en-US " ,
"gender" : " female " ,
"pitchControl" : false
}
Exemplo 11: Google Voice com taxas recomendadas de tom e velocidade
{
"label" : " Voix Google féminine (France) " ,
"name" : " Google français " ,
"language" : " fr-FR " ,
"gender" : " female " ,
"rate" : 1 ,
"pitch" : 0.8
}
Notas adicionais
Através do trabalho realizado para documentar uma lista de vozes recomendadas, também acabei testando vários navegadores/SO para ver como eles se comportam. Esta seção pretende resumir algumas dessas informações.
Uma etiqueta dedicada também está disponível para rastrear problemas externos relatados à Apple, Google, Microsoft ou Mozilla.
Em geral
- A API Web Speech retorna os seguintes campos através do método
getVoices()
: name
, voiceURI
, lang
, localService
e default
. - Embora
voiceURI
deva ser a forma mais consistente de identificar uma voz na teoria, na prática isso não poderia estar mais longe da verdade. A maioria dos navegadores usa o mesmo valor que name
para voiceURI
e não impõe exclusividade. - Como veremos nas notas para navegadores/sistemas operacionais específicos,
name
também é implementado de forma inconsistente e pode retornar valores diferentes para a mesma voz no mesmo dispositivo. -
localService
indica se uma voz está disponível para uso offline e parece estar funcionando conforme o esperado, e é por isso que a lista atual de vozes recomendadas não contém essa informação. -
lang
parece ser mais confiável em implementações, retornando um idioma usando tags de idioma BCP 47, com o idioma principal em letras minúsculas e a subtag em letras maiúsculas ( pt-BR
). - Infelizmente, existem alguns valores discrepantes:
- No Android, Samsung e Chrome usam um sublinhado como separador:
en_us
(problema relacionado) - Enquanto o Firefox no Android fica ainda mais criativo, usando códigos de três letras para idiomas e adicionando uma string extra no final:
eng-US-f000
(problema relacionado)
-
default
destina-se a indicar se uma voz é a voz padrão para o idioma atual do aplicativo. Em teoria, isso deveria ser extremamente útil, mas na prática é realmente difícil de usar devido a inconsistências entre implementações, contexto limitado (padrão do sistema versus padrão do usuário) e à falta de capacidade de definir uma voz padrão por idioma. - Além do uso de
default
, os implementadores devem sempre considerar o uso também do cabeçalho HTTP Accept-Language
, pois ele contém uma lista ordenada de idioma/região preferido para um determinado usuário.
Android
- Por enquanto, cobrimos apenas testes e documentação nas versões vanilla do Android, disponíveis em dispositivos Google Pixel. A lista de vozes disponíveis pode variar muito com base no OEM, no dispositivo e na versão do Android.
- Devido à natureza do Android, será muito difícil documentar todas essas variações. Outras tentativas serão feitas em versões futuras deste projeto através do uso de farms de dispositivos (questão relacionada).
- Nas versões recentes do vanilla Android, há uma excelente seleção de vozes de alta qualidade que cobrem uma ampla variedade de idiomas/regiões (67 em abril de 2024).
- Para usar essas vozes, o usuário precisa se aprofundar bastante nas configurações do sistema para baixá-las (apenas o idioma do sistema e alguns dos idiomas mais populares são pré-carregados por padrão) ou selecionar sua voz preferida por idioma/região.
- Infelizmente, o Chrome no Android não retorna a lista de vozes disponíveis para os usuários; em vez disso, retorna uma lista não filtrada de idiomas/regiões (problema relacionado).
- Para piorar as coisas, essas vozes e regiões são todas localizadas com a localidade do sistema.
- Entre outras coisas, isso significa que mesmo idiomas e regiões que exigem a instalação de um pacote de voz aparecerão na lista retornada pela Web Speech API (problema relacionado).
- Se o usuário selecionar um idioma/região para o qual o pacote de voz precisa ser baixado, o Chrome usará como padrão uma voz em inglês (problema relacionado).
- Mesmo quando um pacote de voz tiver sido instalado, o usuário poderá precisar selecionar uma voz padrão para cada região antes que um idioma/região possa ser usado.
- Com essa abordagem inadequada para seleção de voz, o Chrome no Android também não indica o idioma/região preferido do usuário usando
default
(problema relacionado).
Área de trabalho do Chrome
- No desktop, o Chrome vem pré-carregado com uma seleção limitada de 19 vozes de alta qualidade em 15 idiomas.
- Todas essas vozes requerem acesso online para serem usadas, sem qualquer recurso a uma variante offline de qualidade inferior.
- Infelizmente, essas vozes também são afetadas por um bug se qualquer expressão lida pela Web Speech API demorar mais de 14 segundos (problema relacionado) e não retornar eventos de limite (problema relacionado).
- Nas atuais circunstâncias, essas vozes do Google tiveram prioridade inferior às suas contrapartes da Microsoft/Apple na lista de vozes recomendadas.
- No geral, é lamentável que o Chrome Desktop esteja muito atrás do Android e do Chrome OS no que diz respeito à variedade de vozes e idiomas suportados por padrão (problema relacionado).
SO Chrome
- O Chrome OS vem com quatro conjuntos de vozes: vozes do Chrome OS, vozes do Android (mais de 50 idiomas), vozes naturais e vozes eSpeak (38 idiomas).
- Por padrão, o Chrome OS baixa as vozes do Chrome OS para o idioma do seu sistema, enquanto as vozes do Android e eSpeak estão disponíveis para todos os idiomas.
- O Google também está adicionando gradualmente suporte para vozes naturais, que são basicamente variantes de maior qualidade de suas vozes Android, com o benefício adicional de trabalhar offline. As vozes naturais exigem que o usuário acesse as configurações do sistema para instalá-las.
- O Chrome OS tem uma tendência infeliz de desinstalar pacotes de voz sempre que uma nova atualização do Chrome OS é instalada, o que acontece com muita frequência.
- A maioria das vozes do Android oferece variantes offline e online e estão no mesmo nível de qualidade do que a Apple oferece em termos de vozes para download.
- Essas vozes do Android têm alguns dos piores nomes em qualquer plataforma/navegador, tornando-as dificilmente utilizáveis sem o tipo de re-rotulagem oferecido por este projeto.
- As vozes do Android também sofrem de problemas de latência e/ou disponibilidade. Em alguns casos, pode levar até um minuto para que a primeira expressão seja lida em voz alta.
- As vozes do Chrome estão um passo abaixo das vozes do Android, mas oferecem uma seleção decente para os idiomas mais comuns.
- As vozes eSpeak devem ser evitadas a todo custo devido à sua qualidade extremamente baixa e foram documentadas separadamente para filtrá-las.
Borda
- No desktop, o Edge oferece a melhor seleção de vozes de alta qualidade com mais de 250 vozes pré-carregadas em 75 idiomas (em abril de 2024).
- Todas essas vozes chamadas “naturais” dependem de aprendizado de máquina (ML) e, portanto, requerem acesso online para serem usadas.
- Um pequeno número dessas vozes também é multilíngue e parece ser capaz de detectar o idioma de uma frase e se adaptar de acordo. Infelizmente, isso não funciona tão bem quando há uma mudança de idioma no meio de uma frase.
- Pelo menos no macOS, há um bug estranho em que o Edge exibe inicialmente apenas 18 vozes naturais, mas isso se estende para mais de 250 depois que a Web Speech API é usada para gerar uma expressão.
- Há também questões adicionais das quais os implementadores devem estar cientes ao usar essas vozes: elas não suportam ajuste de tom (problema relacionado) e vários caracteres precisam ser escapados para evitar problemas de reprodução (problema relacionado).
- No celular, o Edge não é tão interessante:
- É completamente inutilizável no Android, pois retorna uma lista vazia de vozes, o que torna impossível o uso com a Web Speech API (problema relacionado).
- No iOS/iPadOS, todos os navegadores são atualmente forçados a usar o Safari como mecanismo, o que significa que o Edge se comporta exatamente como o Safari Mobile.
Raposa de fogo
- No desktop, o Firefox parece bastante simples quando se trata de seleção de voz.
- Ao contrário do Chrome e do Edge, o Firefox não vem com nenhuma voz própria pré-carregada.
- O Firefox tem uma abordagem diferente para
voiceURI
, onde cada voz é verdadeiramente identificada por um URN único. - Como isso é exclusivo do Firefox, os arquivos JSON atuais ainda não documentam esses URI, mas isso pode ser uma adição futura.
- No macOS, o Firefox requer uma reinicialização completa do sistema para que novas vozes apareçam na lista.
iOS e iPadOS
- Ambos os sistemas operacionais vêm com o mesmo conjunto de vozes pré-carregadas e vozes para download que o macOS. Leia a seção macOS abaixo para obter informações adicionais sobre as vozes disponíveis.
- Por uma razão desconhecida, algumas vozes pré-carregadas também são listadas duas vezes, mas fornecem a mesma saída de áudio.
- Todos os navegadores precisam ser executados no webview do sistema, o que significa que eles são apenas um shell no Safari Mobile, em vez de navegadores verdadeiramente diferentes.
- Esta situação pode mudar devido à Lei do Mercado Digital na Europa, forçando a Apple a alterar a sua política em relação a navegadores e visualizações web de terceiros.
macOS
- O macOS oferece uma extensa lista de vozes em 45 idiomas, pré-carregadas ou para download.
- Essas vozes podem ter até três variantes diferentes, com base na qualidade da saída (e no tamanho do download).
- As vozes da mais alta qualidade são provavelmente as disponíveis para Siri, mas infelizmente não estão disponíveis por meio da Web Speech API (problema relacionado).
- No outro extremo do espectro, a Apple teve a infeliz ideia de pré-carregar uma grande variedade de vozes estranhas e de baixa qualidade, como os pacotes de voz Eloquence (8 vozes) e Effects (15 vozes).
- A existência dessas vozes por si só é um bom motivo para filtrar as vozes disponíveis para usuários do macOS e destacar as recomendadas neste repositório.
- Ao contrário de outras plataformas/sistemas operacionais, o macOS decidiu localizar nomes de voz. Isso não seria um problema se
voiceURI
pudesse ser usado como um identificador confiável para vozes, mas não é o caso (problema relacionado). - Em seu estado atual, este repositório documenta apenas localizações para os idiomas com suporte oficial e não para os 45 idiomas com suporte do mecanismo macOS TTS.
Safári
- Para o bem ou para o mal, o comportamento do Safari é mais consistente entre as versões desktop e móvel.
- As vozes para download não aparecem na lista retornada pela Web Speech API (problema relacionado).
- Pior ainda, ao instalar variantes de vozes pré-carregadas de maior qualidade, essas vozes desaparecem no Safari, o que significa que idiomas inteiros podem desaparecer completamente.
- Todas as vozes retornam
true
para default
no Safari, o que torna impossível detectar e selecionar o padrão do sistema/usuário (problema relacionado).
Windows
- A Microsoft oferece uma página muito útil, listando todas as vozes disponíveis no Windows 10 e 11, para um total de 98 vozes em 36 idiomas.
- As vozes naturais oferecem uma experiência muito melhor, mas exigem uma versão atualizada do Windows 11 e precisam ser baixadas (com a vantagem adicional de também funcionarem offline).
- A Microsoft demorou a adicionar essas vozes naturais ao Windows 11 em geral. Até bem recentemente, apenas vozes dos EUA (3 vozes) estavam disponíveis. A lista agora é um pouco mais longa (23 vozes em 8 idiomas), mas permanece muito aquém do que oferecem através do Edge (mais de 250 vozes em 75 idiomas).
- Infelizmente, essas vozes de qualidade superior não estão listadas corretamente no Chrome ou Firefox atualmente (problema relacionado). Eles só aparecem no Edge, onde são pré-carregados de qualquer maneira, mas estritamente para uso online.