Za pomocą interfejsu GenAI Text to Speech API w ML Kit możesz przekształcać tekst na mowę. Interfejs Text to Speech API wykorzystuje model generatywnej AI, aby zapewnić wysokiej jakości syntezę mowy.
Zalecamy używanie interfejsu ML Kit Text to Speech API, gdy jest to możliwe, ponieważ zapewnia on bardzo naturalnie brzmiące głosy. Jeśli jednak nie jest on dostępny, możesz użyć interfejsu TextToSpeech API platformy Androida.
Najważniejsze funkcje
- ujednolicone opcje pobierania i wnioskowania w ramach jednego pakietu SDK;
- Interfejs API Kotlin-first, który używa współprogramów i Flow do strumieniowego przesyłania stanu odtwarzania i dźwięku.
Wymagania wstępne
Aby korzystać z interfejsu Text to Speech API, musisz spełniać te wymagania:
- masz jedno z tych obsługiwanych urządzeń:
- Google: Pixel 8, Pixel 9, Pixel 10, Pixel 11
- Samsung: Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
- Masz najnowszą wersję aplikacji Rozpoznawanie i synteza mowy (
com.google.android.tts) z Google Play. Jeśli aplikacja nie jest zainstalowana lub jest nieaktualna, podczas implementowania zamiany tekstu na mowę metodacheckStatus()zwracaFeatureStatus.UNAVAILABLE. - Twój projekt używa minimalnej wersji pakietu SDK (
minSdk) 26 lub nowszej.
Rozpocznij
Aby rozpocząć, dodaj zależność ML Kit Text to Speech do pliku build.gradle.kts (lub build.gradle) na poziomie modułu:
Kotlin
dependencies {
// ML Kit GenAI TTS SDK
implementation("com.google.mlkit:genai-text-to-speech:1.0.0-alpha1")
}
Zakręcony
dependencies {
// ML Kit GenAI TTS SDK
implementation 'com.google.mlkit:genai-text-to-speech:1.0.0-alpha1'
}
Integracja interfejsu Text-to-Speech API
Aby użyć interfejsu Text-to-Speech API, wykonaj te czynności:
- Zainicjuj klienta: utwórz instancję klienta
SpeechSynthesizer, przekazując obiekt konfiguracjiSpeechSynthesizerOptions. Do obsługi wszystkich języków wystarczy jedna instancja klienta. Ustawienia regionalne określone w obiekcie opcji określają tylko domyślną listę języków zwracaną przez metodęgetSupportedVoices(). - Pobierz model: sprawdź dostępność docelowego głosu. Jeśli stan to
FeatureStatus.DOWNLOADABLE, wywołaj metodędownload(), aby pobrać model głosu na urządzenie. - Zsyntetyzuj treść: utwórz obiekt
SpeechSynthesizerRequestzawierający tekst wejściowy i docelowy głos. Wywołaj metodęsynthesize(), aby wygenerować dźwięk i zebrać aktualizacje stanu odtwarzania oraz fragmenty dźwięku.
// 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()
Obsługiwane głosy
Interfejs ML Kit Text to Speech API obsługuje te głosy. Wybierz głos według nazwy, używając właściwości VoiceInfo.name.
- star02: głos kobiecy, średni ton
- star04: mężczyzna, średnio wysoki ton
- star05: mężczyzna, niski ton głosu
- star08: głos kobiecy, niski ton
- star11: głos męski, średni ton, brzmiący młodziej;
- star12: głos kobiecy, średnio wysoki
- star13: mężczyzna, średni ton
- star16: głos kobiecy, średnio niski ton
Obsługiwane języki
Interfejs Text to Speech API w ML Kit obsługuje te języki:
- arabski (ar-XA)
- duński (da-DK),
- niemiecki (de-DE),
- angielski (en-GB)
- angielski (en-US)
- Spanish (es-ES)
- Spanish (es-US)
- francuski (fr-CA)
- francuski (fr-FR)
- hindi (hi-IN)
- indonezyjski (id-ID),
- włoski (it-IT),
- japoński (ja-JP),
- koreański (ko-KR),
- norweski (nb-NO),
- niderlandzki (nl-NL),
- polski (pl-PL)
- portugalski (pt-BR),
- rosyjski (ru-RU),
- szwedzki (sv-SE),
- turecki (tr-TR),
Typowe problemy z konfiguracją
Oto kilka typowych problemów i wskazówek dotyczących rozwiązywania problemów:
| Problem | Możliwa przyczyna | Zalecane rozwiązania |
|---|---|---|
Lista głosów (z metody getSupportedVoices()) jest pusta. |
Urządzenie nie jest obsługiwane lub brakuje aplikacji Rozpoznawanie i synteza mowy albo jest ona nieaktualna. | Sprawdź, czy urządzenie jest obsługiwane, i zaktualizuj aplikację Rozpoznawanie i synteza mowy. |
Metoda checkStatus() zwraca FeatureStatus.UNAVAILABLE. |
Urządzenie nie jest obsługiwane lub nie ma aplikacji Rozpoznawanie i synteza mowy albo jest ona nieaktualna. | Sprawdź, czy urządzenie jest obsługiwane, i zaktualizuj aplikację Rozpoznawanie i synteza mowy. |
Metoda checkStatus() zwraca FeatureStatus.DOWNLOADABLE. |
Głos nie został jeszcze pobrany na urządzenie. | Wywołaj metodę download() i poczekaj na jej zakończenie, zanim wywołasz metodę synthesize(). |
| Pobieranie nie powiodło się lub nie postępuje. | Brak połączenia sieciowego. | Spróbuj ponownie, gdy urządzenie będzie online. |