Con la API de Text-to-Speech de IA generativa de ML Kit, puedes sintetizar contenido de texto en audio de voz. La API de Text-to-Speech usa un modelo de IA generativa para proporcionar una síntesis de voz de alta calidad.
Te recomendamos que uses la API de Text to Speech del ML Kit cuando sea posible, ya que
proporciona voces muy similares a las humanas, pero, si no está disponible, puedes usar la
API de TextToSpeech de la plataforma de Android.
Funciones clave
- Opciones unificadas de descarga y de inferencia en un solo SDK
- Es una API que prioriza Kotlin y usa corrutinas y Flow para transmitir el estado de reproducción y el audio.
Requisitos previos
Para usar la API de Text-to-Speech, debes cumplir con los siguientes requisitos:
- Tienes uno de los siguientes dispositivos compatibles:
- Google: Pixel 8, Pixel 9, Pixel 10 y Pixel 11
- Samsung: Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
- Tienes la versión más reciente de la
app de Reconocimiento y síntesis de voz
(
com.google.android.tts) de Google Play. Si falta la app o está desactualizada, cuando se implementa la función de texto a voz, el métodocheckStatus()devuelveFeatureStatus.UNAVAILABLE. - Tu proyecto usa una versión mínima del SDK (
minSdk) de 26 o posterior.
Comenzar
Para comenzar, agrega la dependencia de texto a voz del ML Kit al archivo build.gradle.kts (o build.gradle)
a nivel del 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'
}
Integra la API de Text-to-Speech
Para usar la API de Text-to-Speech, sigue estos pasos:
- Inicializa el cliente: Crea una instancia de cliente
SpeechSynthesizerpasando un objeto de configuraciónSpeechSynthesizerOptions. Solo necesitas una instancia de cliente para admitir todos los idiomas. La configuración regional especificada en tu objeto de opciones solo determina la lista de idiomas predeterminada que devuelve el métodogetSupportedVoices(). - Descarga el modelo: Verifica la disponibilidad de tu voz de destino. Si el estado es
FeatureStatus.DOWNLOADABLE, llama al métododownload()para descargar el modelo de voz en el dispositivo. - Sintetiza el contenido: Construye un objeto
SpeechSynthesizerRequestque contenga el texto de entrada y la voz de destino. Llama al métodosynthesize()para generar el audio y recopilar las actualizaciones del estado de reproducción y los fragmentos de audio.
// 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()
Voces admitidas
La API de texto a voz del ML Kit admite las siguientes voces. Selecciona una voz por
nombre con la propiedad VoiceInfo.name.
- star02: femenina, tono medio
- star04: masculino, tono medio-alto
- star05: masculino, tono grave
- star08: mujer, tono grave
- star11: masculino, tono medio, voz más joven
- star12: mujer, tono medio-alto
- star13: masculino, tono medio
- star16: mujer, tono medio bajo
Idiomas admitidos
La API de texto a voz del ML Kit admite las siguientes configuraciones regionales:
- Árabe (ar-XA)
- Danés (da-DK)
- Alemán (de-DE)
- Inglés (en-GB)
- Inglés (en-US)
- Español (es-ES)
- Español (es-US)
- Francés (fr-CA)
- Francés (fr-FR)
- Hindi (hi-IN)
- Indonesio (id-ID)
- Italiano (it-IT)
- Japonés (ja-JP)
- Coreano (ko-KR)
- Noruego (nb-NO)
- Neerlandés (nl-NL)
- (pl-PL)
- Portugués (pt-BR)
- Ruso (ru-RU)
- Sueco (sv-SE)
- Turco (tr-TR)
Problemas comunes de configuración
Estos son algunos problemas comunes y sugerencias para solucionarlos:
| Problema | Posible motivo | Solución recomendada |
|---|---|---|
La lista de voces (del método getSupportedVoices()) está vacía. |
El dispositivo no es compatible, o bien la app de Análisis y síntesis de voz no está disponible o está desactualizada. | Verifica que tu dispositivo sea compatible y actualiza la app de Análisis y síntesis de voz. |
El método checkStatus() devuelve FeatureStatus.UNAVAILABLE. |
El dispositivo no es compatible, o bien la app de Análisis y síntesis de voz no está disponible o está desactualizada. | Verifica que tu dispositivo sea compatible y actualiza la app de Análisis y síntesis de voz. |
El método checkStatus() devuelve FeatureStatus.DOWNLOADABLE. |
La voz aún no se descargó en el dispositivo. | Llama al método download() y espera a que finalice antes de llamar al método synthesize(). |
| La descarga falla o no avanza. | No hay conexión de red | Vuelve a intentarlo cuando el dispositivo esté en línea. |