GenAI Text to Speech API

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ę metoda checkStatus() zwraca FeatureStatus.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:

  1. Zainicjuj klienta: utwórz instancję klienta SpeechSynthesizer, przekazując obiekt konfiguracji SpeechSynthesizerOptions. 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().
  2. 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.
  3. Zsyntetyzuj treść: utwórz obiekt SpeechSynthesizerRequest zawierają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.