Con l'API GenAI Text to Speech di ML Kit, puoi sintetizzare i contenuti di testo in audio vocale. L'API Text-to-Speech utilizza un modello di AI generativa per fornire una sintesi vocale di alta qualità.
Ti consigliamo di utilizzare l'API Text-to-Speech di ML Kit, se possibile, poiché fornisce voci molto simili a quelle umane, ma se non è disponibile puoi utilizzare l'API TextToSpeech della piattaforma Android.
Funzionalità chiave
- Opzioni di download e inferenza unificate all'interno di un unico SDK.
- API Kotlin-first che utilizza coroutine e Flow per riprodurre in streaming lo stato di riproduzione e l'audio.
Prerequisiti
Per utilizzare l'API Text-to-Speech, devi soddisfare i seguenti requisiti:
- Possiedi uno dei seguenti dispositivi supportati:
- Google: Pixel 8, Pixel 9, Pixel 10, Pixel 11
- Samsung: Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
- Disponi dell'ultima versione dell'app Riconoscimento/Sintesi vocale (
com.google.android.tts) di Google Play. Se l'app non è presente o non è aggiornata, quando implementi la funzionalità da testo a voce, il metodocheckStatus()restituisceFeatureStatus.UNAVAILABLE. - Il tuo progetto utilizza una versione dell'SDK minimo (
minSdk) pari o superiore a 26.
Inizia
Per iniziare, aggiungi la dipendenza di ML Kit Text to Speech al file build.gradle.kts (o build.gradle) a livello di modulo:
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 l'API Text-to-Speech
Per utilizzare l'API Text-to-Speech, segui questi passaggi:
- Inizializza il client: crea un'istanza client
SpeechSynthesizerpassando un oggetto di configurazioneSpeechSynthesizerOptions. Per supportare tutte le lingue, è sufficiente una singola istanza client. Le impostazioni internazionali specificate nell'oggetto options determinano solo l'elenco delle lingue predefinito restituito dal metodogetSupportedVoices(). - Scarica il modello: verifica la disponibilità della voce target. Se lo stato è
FeatureStatus.DOWNLOADABLE, chiama il metododownload()per scaricare il modello vocale sul dispositivo. - Sintetizza i contenuti: crea un oggetto
SpeechSynthesizerRequestcontenente il testo di input e la voce di destinazione. Chiama il metodosynthesize()per generare l'audio e raccogli gli aggiornamenti dello stato della riproduzione e i blocchi 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()
Voci supportate
L'API ML Kit Text to Speech supporta le seguenti voci. Seleziona una voce per nome utilizzando la proprietà VoiceInfo.name.
- star02: voce femminile, tonalità media
- star04: voce maschile, tono medio-alto
- star05: voce maschile, tono basso
- star08: voce femminile, tono basso
- star11: voce maschile, tonalità media, suono più giovane
- star12: donna, tono medio-alto
- star13: voce maschile, tonalità media
- star16: voce femminile, tono medio-basso
Lingue supportate
L'API Text to Speech di ML Kit supporta le seguenti impostazioni internazionali:
- Arabo (ar-XA)
- Danese (da-DK)
- Tedesco (de-DE)
- Inglese (en-GB)
- Inglese (en-US)
- Spagnolo (es-ES)
- Spagnolo (es-US)
- Francese (fr-CA)
- Francese (fr-FR)
- Hindi (hi-IN)
- Indonesiano (id-ID)
- Italiano (it-IT)
- Giapponese (ja-JP)
- Coreano (ko-KR)
- Norvegese (nb-NO)
- Olandese (nl-NL)
- Polacco (pl-PL)
- Portoghese (pt-BR)
- Russo (ru-RU)
- Svedese (sv-SE)
- Turco (tr-TR)
Problemi di configurazione comuni
Di seguito sono riportati alcuni problemi comuni e suggerimenti per la risoluzione:
| Problema | Possibile motivo | Correzione consigliata |
|---|---|---|
L'elenco delle voci (dal metodo getSupportedVoices()) è vuoto. |
Il dispositivo non è supportato oppure l'app Riconoscimento e sintesi vocali non è presente o non è aggiornata. | Verifica che il tuo dispositivo sia supportato e aggiorna l'app Riconoscimento/Sintesi vocale. |
Il metodo checkStatus() restituisce FeatureStatus.UNAVAILABLE. |
Il dispositivo non è supportato oppure l'app Riconoscimento e sintesi vocali non è presente o non è aggiornata. | Verifica che il tuo dispositivo sia supportato e aggiorna l'app Riconoscimento/Sintesi vocale. |
Il metodo checkStatus() restituisce FeatureStatus.DOWNLOADABLE. |
La voce non è ancora stata scaricata sul dispositivo. | Chiama il metodo download() e attendi che venga completato prima di chiamare il metodo synthesize(). |
| Il download non riesce o non procede. | Nessuna connessione di rete. | Riprova quando il dispositivo è online. |