Com a API GenAI Text to Speech do Kit de ML, é possível sintetizar conteúdo de texto em áudio de fala. A API Text-to-Speech usa um modelo de IA generativa para fornecer síntese de voz de alta qualidade.
Recomendamos usar a API Text-to-Speech do Kit de ML sempre que possível, porque ela
oferece vozes muito semelhantes às humanas. No entanto, se ela não estiver disponível, use a
API
TextToSpeech
da plataforma Android.
Principais recursos
- Opções unificadas de download e inferência em um único SDK.
- API que prioriza o Kotlin e usa corrotinas e fluxo para transmitir o status de reprodução e o áudio.
Pré-requisitos
Para usar a API Text-to-Speech, você precisa atender aos seguintes requisitos:
- Você tem um dos seguintes dispositivos compatíveis:
- Google: Pixel 8, Pixel 9, Pixel 10, Pixel 11
- Samsung: Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
- Você tem a versão mais recente do
app Reconhecimento/Síntese de voz
(
com.google.android.tts) do Google Play. Se o app estiver ausente ou desatualizado, ao implementar a conversão de texto em voz, o métodocheckStatus()vai retornarFeatureStatus.UNAVAILABLE. - Seu projeto usa uma versão mínima do SDK (
minSdk) de 26 ou mais recente.
Primeiros passos
Para começar, adicione a dependência da Conversão de Texto em Voz do Kit de ML ao arquivo build.gradle.kts (ou build.gradle)
no nível do módulo:
Kotlin
dependencies {
// ML Kit GenAI TTS SDK
implementation("com.google.mlkit:genai-text-to-speech:1.0.0-alpha1")
}
Groovy
dependencies {
// ML Kit GenAI TTS SDK
implementation 'com.google.mlkit:genai-text-to-speech:1.0.0-alpha1'
}
Integrar a API Text-to-Speech
Para usar a API Text-to-Speech, siga estas etapas:
- Inicialize o cliente: crie uma instância de cliente
SpeechSynthesizertransmitindo um objeto de configuraçãoSpeechSynthesizerOptions. Você só precisa de uma única instância de cliente para oferecer suporte a todos os idiomas. A localidade especificada no objeto de opções determina apenas a lista de idiomas padrão retornada pelo métodogetSupportedVoices(). - Baixe o modelo: verifique a disponibilidade da voz de destino. Se o
status for
FeatureStatus.DOWNLOADABLE, chame o métododownload()para fazer o download do modelo de voz no dispositivo. - Sintetize o conteúdo: crie um objeto
SpeechSynthesizerRequestque contenha o texto de entrada e a voz de destino. Chame o métodosynthesize()para gerar o áudio e coletar as atualizações de status da reprodução e os blocos de áudio.
// Initialize the `SpeechSynthesizer` client.
// One client serves every language. `Locale.US` is only the default list locale.
val options = speechSynthesizerOptions(Locale.US)
val client = SpeechSynthesis.getClient(options)
// Query voices for multiple languages using the same client instance.
val englishVoice = client.getSupportedVoices().first() // Uses the default `Locale.US`
val frenchVoice = client.getSupportedVoices(Locale.FRANCE).first()
// Check and download a voice model (for example, the French voice model).
if (client.checkStatus(frenchVoice) == FeatureStatus.DOWNLOADABLE) {
client.download(frenchVoice).collect { status -> println("Download status: $status") }
}
// Construct the request.
// The `VoiceInfo` instance, `frenchVoice` here, determines the spoken language.
val request = SpeechSynthesizerRequest(
input = SpeechSynthesizerRequest.Input.Text("Bonjour tout le monde", frenchVoice),
audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
)
// Speak and collect streaming audio or status.
client.synthesize(request).collect { response ->
when (response) {
is SpeechSynthesizerResponse.StatusUpdate -> println("Playback status: ${response.status}")
is SpeechSynthesizerResponse.AudioAvailable -> println("Audio chunk: ${response.audio.size} bytes")
is SpeechSynthesizerResponse.Error -> println("Error: ${response.errorCode}")
}
}
// Release resources when done.
client.close()
Vozes compatíveis
A API Text-to-Speech do Kit de ML é compatível com as seguintes vozes. Selecione uma voz pelo
nome usando a propriedade VoiceInfo.name.
- star02: feminina, tom médio
- star04: voz masculina, tom médio-alto
- star05: masculino, tom grave
- star08: feminina, tom grave
- star11: voz masculina, tom médio, jovem
- star12: feminina, tom médio-agudo
- star13: masculina, tom médio
- star16: feminina, tom médio-baixo
Idiomas compatíveis
A API Text-to-Speech do Kit de ML é compatível com as seguintes localidades:
- Árabe (ar-XA)
- Dinamarquês (da-DK)
- Alemão (de-DE)
- Inglês (en-GB)
- Inglês americano (en-US)
- Espanhol (es-ES)
- Espanhol (es-US)
- Francês (fr-CA)
- Francês (fr-FR)
- Hindi (hi-IN)
- Indonésio (id-ID)
- Italiano (it-IT)
- Japonês (ja-JP)
- Coreano (ko-KR)
- Norueguês (nb-NO)
- Holandês (nl-NL)
- Polonês (pl-PL)
- Português (pt-BR)
- Russo (ru-RU)
- Sueco (sv-SE)
- Turco (tr-TR)
Problemas comuns de configuração
Confira alguns problemas comuns e dicas de solução de problemas:
| Problema | Possível motivo | Correção recomendada |
|---|---|---|
A lista de vozes (do método getSupportedVoices()) está vazia. |
O dispositivo não é compatível ou o app Reconhecimento e Síntese de Voz está ausente ou desatualizado. | Verifique se o dispositivo é compatível e atualize o app Reconhecimento/Síntese de voz. |
O método checkStatus() retorna FeatureStatus.UNAVAILABLE. |
O dispositivo não é compatível ou o app Reconhecimento e Síntese de Voz está ausente ou desatualizado. | Verifique se o dispositivo é compatível e atualize o app Reconhecimento e Síntese de Voz. |
O método checkStatus() retorna FeatureStatus.DOWNLOADABLE. |
A voz ainda não foi baixada no dispositivo. | Chame o método download() e aguarde a conclusão dele antes de chamar o método synthesize(). |
| O download falha ou não avança. | Sem conexão de rede. | Tente de novo quando o dispositivo estiver on-line. |