API GenAI Text-to-Speech

Avec l'API GenAI Text-to-Speech de ML Kit, vous pouvez synthétiser du contenu textuel en contenu audio. L'API Text-to-Speech utilise un modèle d'IA générative pour fournir une synthèse vocale de haute qualité.

Nous vous recommandons d'utiliser l'API ML Kit Text-to-Speech dans la mesure du possible, car elle fournit des voix très humaines. Toutefois, si elle n'est pas disponible, vous pouvez utiliser l'API TextToSpeech de la plate-forme Android à la place.

Capacités clés

  • Options de téléchargement et d'inférence unifiées dans un seul SDK.
  • API Kotlin-first qui utilise des coroutines et Flow pour diffuser l'état de lecture et l'audio.

Prérequis

Pour utiliser l'API Text-to-Speech, vous devez remplir les conditions suivantes :

  • Vous possédez l'un des appareils compatibles suivants :
    • Google : Pixel 8, Pixel 9, Pixel 10, Pixel 11
    • Samsung : Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
  • Vous disposez de la dernière version de l'application Reconnaissance et synthèse vocales (com.google.android.tts) sur Google Play. Si l'application est manquante ou obsolète, la méthode checkStatus() renvoie FeatureStatus.UNAVAILABLE lors de l'implémentation de la synthèse vocale.
  • Votre projet utilise une version minimale du SDK (minSdk) de 26 ou plus.

Commencer

Pour commencer, ajoutez la dépendance ML Kit Text-to-Speech au fichier build.gradle.kts (ou build.gradle) au niveau du module :

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'
}

Intégrer l'API Text-to-Speech

Pour utiliser l'API Text-to-Speech, procédez comme suit :

  1. Initialisez le client : créez une instance de client SpeechSynthesizer en transmettant un objet de configuration SpeechSynthesizerOptions. Vous n'avez besoin que d'une seule instance client pour prendre en charge toutes les langues. Les paramètres régionaux spécifiés dans votre objet d'options déterminent simplement la liste de langues par défaut renvoyée par la méthode getSupportedVoices().
  2. Télécharger le modèle : vérifiez la disponibilité de votre voix cible. Si l'état est FeatureStatus.DOWNLOADABLE, appelez la méthode download() pour télécharger l'empreinte vocale sur l'appareil.
  3. Synthétiser le contenu : créez un objet SpeechSynthesizerRequest contenant votre texte d'entrée et la voix cible. Appelez la méthode synthesize() pour générer l'audio, et collectez les mises à jour de l'état de lecture et les segments 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()

Voix compatibles

L'API Text-to-Speech de ML Kit est compatible avec les voix suivantes. Sélectionnez une voix par nom à l'aide de la propriété VoiceInfo.name.

  • star02 : femme, ton moyen
  • star04 : homme, ton moyennement aigu
  • star05 : homme, ton grave
  • star08 : femme, ton grave
  • star11 : homme, ton moyen, voix jeune
  • star12 : femme, tonalité moyennement aiguë
  • star13 : homme, ton moyen
  • star16 : femme, ton moyen grave

Langues disponibles

L'API Text-to-Speech de ML Kit est compatible avec les paramètres régionaux suivants :

  • Arabe (ar-XA)
  • Danois (da-DK)
  • German (de-DE)
  • English (en-GB)
  • English (en-US)
  • Spanish (es-ES)
  • Espagnol (es-US)
  • Français (fr-CA)
  • French (fr-FR)
  • Hindi (hi-IN)
  • Indonesian (id-ID)
  • Italian (it-IT)
  • Japanese (ja-JP)
  • Coréen (ko-KR)
  • Norvégien (nb-NO)
  • Dutch (nl-NL)
  • Polonais (pl-PL)
  • Portugais (pt-BR)
  • Russe (ru-RU)
  • Suédois (sv-SE)
  • Turkish (tr-TR)

Problèmes de configuration courants

Voici quelques problèmes courants et des conseils pour les résoudre :

Problème Motif possible Correction recommandée
La liste des voix (de la méthode getSupportedVoices()) est vide. L'appareil n'est pas compatible, ou l'application Reconnaissance et synthèse vocales est manquante ou obsolète. Vérifiez que votre appareil est compatible et mettez à jour l'application Reconnaissance et synthèse vocales.
La méthode checkStatus() renvoie FeatureStatus.UNAVAILABLE. L'appareil n'est pas compatible, ou l'application Reconnaissance et synthèse vocales est manquante ou obsolète. Vérifiez que votre appareil est compatible et mettez à jour l'application Speech Recognition & Synthesis.
La méthode checkStatus() renvoie FeatureStatus.DOWNLOADABLE. La voix n'est pas encore téléchargée sur l'appareil. Appelez la méthode download() et attendez qu'elle se termine avant d'appeler la méthode synthesize().
Le téléchargement échoue ou ne progresse pas. Aucune connexion réseau. Réessayez lorsque l'appareil sera en ligne.