באמצעות 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, צריך לבצע את השלבים הבאים:
- מאתחלים את הלקוח: יוצרים מכונה של לקוח
SpeechSynthesizerעל ידי העברת אובייקט הגדרה שלSpeechSynthesizerOptions. צריך רק מופע אחד של לקוח כדי לתמוך בכל השפות. הלוקאל שצוין באובייקט האפשרויות רק קובע את רשימת שפות ברירת המחדל שמוחזרת על ידי השיטהgetSupportedVoices(). - הורדת המודל: בודקים אם הקול הרצוי זמין. אם הסטטוס הוא
FeatureStatus.DOWNLOADABLE, צריך להפעיל את ה-methoddownload()כדי להוריד את תבנית הקול למכשיר. - המרת התוכן לדיבור: יוצרים אובייקט
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(). |
| ההורדה נכשלת או לא מתקדמת. | אין חיבור לרשת. | נסו שוב כשהמכשיר מחובר לאינטרנט. |