GenAI Text to Speech API

באמצעות GenAI Text to Speech API של ML Kit, אתם יכולים להמיר תוכן טקסט לאודיו של דיבור. ‫Text to Speech API משתמש במודל AI גנרטיבי כדי לספק סינתזת דיבור באיכות גבוהה.

מומלץ להשתמש ב-ML Kit Text to Speech API כשאפשר, כי הוא מספק קולות שנשמעים אנושיים מאוד. אם הוא לא זמין, אפשר להשתמש במקום זאת ב-TextToSpeech API של פלטפורמת Android.

יכולות עיקריות

  • אפשרויות מאוחדות להורדה ולהסקה ב-SDK אחד.
  • ממשק API שמתמקד ב-Kotlin ומשתמש בשגרות המשך (coroutines) וב-Flow כדי להעביר בסטרימינג את סטטוס ההפעלה והאודיו.

דרישות מוקדמות

כדי להשתמש ב-Text to Speech API, אתם צריכים לעמוד בדרישות הבאות:

  • יש לכם אחד מהמכשירים הנתמכים הבאים:
    • ‫Google: ‏Pixel 8, ‏Pixel 9, ‏Pixel 10, ‏Pixel 11
    • ‫Samsung: Galaxy S25, Galaxy S26, Galaxy Z Fold8, Galaxy Z Fold8 Ultra, Galaxy Z Flip8
  • הגרסה העדכנית של האפליקציה "זיהוי דיבור והמרת טקסט לדיבור" (com.google.android.tts) מותקנת מ-Google Play. אם האפליקציה חסרה או לא מעודכנת, כשמטמיעים המרת טקסט לדיבור, השיטה checkStatus() מחזירה את הערך FeatureStatus.UNAVAILABLE.
  • בפרויקט שלכם מוגדרת גרסת SDK מינימלית (minSdk) של 26 ומעלה.

שנתחיל?

כדי להתחיל, מוסיפים את יחסי התלות של המרת טקסט לדיבור (TTS) ב-ML Kit לקובץ build.gradle.kts (או build.gradle) ברמת המודול:

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

שילוב של Text to Speech API

כדי להשתמש ב-Text to Speech API, צריך לבצע את השלבים הבאים:

  1. מאתחלים את הלקוח: יוצרים מכונה של לקוח SpeechSynthesizer על ידי העברת אובייקט הגדרה של SpeechSynthesizerOptions. צריך רק מופע אחד של לקוח כדי לתמוך בכל השפות. הלוקאל שצוין באובייקט האפשרויות רק קובע את רשימת שפות ברירת המחדל שמוחזרת על ידי השיטה getSupportedVoices().
  2. הורדת המודל: בודקים אם הקול הרצוי זמין. אם הסטטוס הוא FeatureStatus.DOWNLOADABLE, צריך להפעיל את ה-method‏ download() כדי להוריד את תבנית הקול למכשיר.
  3. המרת התוכן לדיבור: יוצרים אובייקט SpeechSynthesizerRequest שמכיל את טקסט הקלט ואת הקול הרצוי. מפעילים את השיטה synthesize() כדי ליצור את האודיו, ולאסוף את העדכונים של סטטוס ההפעלה ואת קטעי האודיו.
// 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()

הקולות הנתמכים

‫ML Kit Text to Speech API תומך בקולות הבאים. בוחרים קול לפי שם באמצעות המאפיין VoiceInfo.name.

  • star02: אישה, קול בינוני
  • star04: גבר, קול בינוני-גבוה
  • star05: גבר, קול נמוך
  • star08: אישה, קול נמוך
  • star11: גבר, גובה צליל בינוני, נשמע צעיר
  • star12: אישה, גובה צליל בינוני-גבוה
  • star13: גבר, גובה צליל בינוני
  • ‫star16: אישה, גובה צליל בינוני-נמוך

שפות נתמכות

‫Text to Speech API של ML Kit תומך בלוקאלים הבאים:

  • ערבית (ar-XA)
  • דנית (da-DK)
  • גרמנית (de-DE)
  • אנגלית (en-GB)
  • אנגלית (en-US)
  • ספרדית (es-ES)
  • ספרדית (es-US)
  • צרפתית (fr-CA)
  • צרפתית (fr-FR)
  • הינדי (hi-IN)
  • אינדונזית (id-ID)
  • איטלקית (it-IT)
  • יפנית (ja-JP)
  • קוריאנית (ko-KR)
  • נורווגית (nb-NO)
  • הולנדית (nl-NL)
  • פולנית (pl-PL)
  • פורטוגזית (pt-BR)
  • רוסית (ru-RU)
  • שוודית (sv-SE)
  • טורקית (tr-TR)

בעיות נפוצות בהגדרה

ריכזנו כאן כמה בעיות נפוצות וטיפים לפתרון בעיות:

בעיה סיבה אפשרית תיקון מומלץ
רשימת הקולות (מהשיטה getSupportedVoices()) ריקה. המכשיר לא נתמך, או שאפליקציית "זיהוי דיבור והמרת טקסט לדיבור " חסרה או לא מעודכנת. מוודאים שהמכשיר נתמך ומעדכנים את האפליקציה "זיהוי דיבור והמרת קול לטקסט".
השיטה checkStatus() מחזירה את הערך FeatureStatus.UNAVAILABLE. המכשיר לא נתמך, או שהאפליקציה "זיהוי דיבור והמרת טקסט לדיבור " חסרה או לא מעודכנת. מוודאים שהמכשיר נתמך ומעדכנים את האפליקציה "זיהוי דיבור והמרת קול לטקסט".
השיטה checkStatus() מחזירה את הערך FeatureStatus.DOWNLOADABLE. הקול עדיין לא הורד למכשיר. מפעילים את ה-method‏ download() וממתינים עד שהיא תסתיים לפני שמפעילים את ה-method‏ synthesize().
ההורדה נכשלת או לא מתקדמת. אין חיבור לרשת. נסו שוב כשהמכשיר מחובר לאינטרנט.