המודלים של Gemini להמרת טקסט לדיבור (TTS) ממירים טקסט לאודיו של דובר אחד או של כמה דוברים. אתם יכולים לשלוט בסגנון, במבטא, בקצב ובטון של האודיו באמצעות מטא-נתונים מובְנים של תור (speech_metadata) ותגי קול מוטבעים.
בדף הזה מוסבר איך ליצור דיבור באמצעות המודלים הבאים, באמצעות השיטות generateContent ו-streamGenerateContent של Gemini Enterprise API:
- Gemini 3.8 Flash TTS
(
gemini-3.8-flash-tts) - Gemini 3.8 Flash-Lite TTS
(
gemini-3.8-flash-lite-tts)
המודלים של TTS מותאמים להקראה מדויקת של טקסט עם שליטה מדויקת בסגנון ובצליל, כמו קריינות, ספרי אודיו ותשובות של סוכן קולי. לשיחות אינטראקטיביות בזמן אמת עם קלט ופלט של אודיו, השתמשו ב-Gemini Live API.
אם אתם משתמשים במודל קודם של Gemini TTS, כמו gemini-3.1-flash-tts-preview, עיינו במדריך להעברת נתונים.
כדי לנסות ליצור דיבור של דובר יחיד בלי לכתוב קוד, פותחים את Gemini 3.8 Flash TTS ב-Agent Studio:
התנסות ב-Gemini 3.8 TTS ב-Agent Studio
מודלים נתמכים
| דגם | דובר יחיד | מספר דוברים | סטרימינג | עיצוב קול (גרסת טרום-השקה) | רפליקציה של קולות (גרסת טרום-השקה) |
|---|---|---|---|---|---|
Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) |
|||||
Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) |
|||||
Gemini 3.1 Flash TTS Preview (gemini-3.1-flash-tts-preview) |
|||||
Gemini 2.5 Pro TTS (gemini-2.5-pro-tts) |
|||||
Gemini 2.5 Flash TTS (gemini-2.5-flash-tts) |
הדוגמאות והתכונות בדף הזה רלוונטיות למודלים של Gemini 3.8 TTS. לגבי המודלים הקודמים, קראו את המאמר Gemini-TTS במסמכי התיעוד שלGoogle Cloud המרת טקסט לדיבור.
מתי להשתמש בכל מודל
לשני המודלים של Gemini 3.8 TTS יש את אותה סכימת בקשה ואותו פורמט הנחיה, אז אתם יכולים לעבור ביניהם על ידי שינוי מזהה המודל:
- השתמשו ב-Gemini 3.8 Flash TTS (
gemini-3.8-flash-tts) כשאתם צריכים דיוק אקוסטי, משחק ניואנסי ושליטה בהבעה. הוא מתאים לעבודה יצירתית ברמה של אולפן, לדיאלוג מורכב עם כמה דוברים, לתגים תכופים של התפרצויות קוליות, להגיות קשות, לניבים אזוריים או של מיעוטים ולקריינות ארוכה שדורשת קול יציב וטון חדר. - משתמשים ב-Gemini 3.8 Flash-Lite TTS (
gemini-3.8-flash-lite-tts) כדי ליצור עומסי עבודה מהירים וחסכוניים בסביבת הייצור. הוא מחליף אתgemini-3.1-flash-tts-preview, ומתאים להפקת אצוות בנפח גבוה, למערכות של סוכני קול לשיחה, לתכונות של הקראה בקול, לרפליקציה של קולות ולדיבור יומיומי של דובר יחיד בשפות עיקריות.
לפני שמתחילים
- מגדירים פרויקט ומפעילים את Gemini Enterprise API.
- מגדירים את Application Default Credentials בסביבת הפיתוח.
כדי להשתמש בדוגמאות הקוד ב-Python, צריך להתקין את גרסה 2.33.0 ומעלה של Google Gen AI SDK:
pip install --upgrade "google-genai>=2.33.0"
מיקומים זמינים ונקודות קצה אזוריות
המודלים של Gemini 3.8 TTS זמינים במיקום global ובמיקומים במספר אזורים us ו-eu:
| מיקום | פרמטר של מיקום | נקודת קצה (endpoint) |
|---|---|---|
| עולמי | global |
https://aiplatform.googleapis.com |
| ארצות הברית (מספר אזורים) | us |
https://aiplatform.us.rep.googleapis.com |
| האיחוד האירופי (מספר אזורים) | eu |
https://aiplatform.eu.rep.googleapis.com |
כדי לקצר את הזמן עד לאודיו הראשון (TTFA) בבקשות סטרימינג, השתמשו בנקודת הקצה us או eu במספר אזורים במקום בנקודת הקצה global. נקודת הקצה global מנתבת בקשות בין אזורים ברחבי העולם, מה שיכול להגדיל את זמן האחזור ברשת לפני שמגיע קטע האודיו הראשון.
כדי להפנות בקשות לנקודת קצה אזורית, מגדירים את location="us" (או את location="eu") כשמפעילים את הלקוח ב-SDK, או שולחים בקשות לשם המארח התואם במספר אזורים (https://aiplatform.us.rep.googleapis.com או https://aiplatform.eu.rep.googleapis.com) עם נתיב המיקום התואם בכתובת ה-URL של ה-REST:
Python
from google import genai
# Set location to 'us' or 'eu' for multi-region routing (or 'global' for global)
client = genai.Client(
enterprise=True,
project="PROJECT_ID",
location="us",
)
response = client.models.generate_content(
model="gemini-3.8-flash-tts",
contents=[{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speech_metadata": {"style": "cheerful and friendly"},
}],
}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {"voice_config": {"voice": "Kore"}},
},
)
with open("out.wav", "wb") as f:
f.write(response.candidates[0].content.parts[0].inline_data.data)
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-tts:generateContent \
-d '{
"contents": [{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speechMetadata": {"style": "cheerful and friendly"}
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"voiceConfig": {"voice": "Kore"}
}
}
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.wav
המרת טקסט לדיבור (TTS) עם דובר יחיד
כדי להמיר טקסט לאודיו של דובר יחיד, מעבירים את התמליל המדויק ב-parts[].text, מוסיפים סגנון אופציונלי ברמת התור ב-parts[].speech_metadata ומגדירים את הקול ב-speechConfig.voiceConfig.voice. בשדה voice אפשר להזין שם של קול מובנה, מזהה קול מ-Extended Voice Library או מזהה (voice_...) של קול מעוצב או משוכפל (או מפתח voicekey_... אופציונלי ללא שמירת מצב).
כברירת מחדל, בקשות אונריות מחזירות קובץ WAV מלא (PCM של 16 ביט, 24kHz, מונו), כך שאפשר לכתוב את בייטי האודיו ישירות לקובץ .wav. במקום זאת, בקשות סטרימינג מחזירות קטעי PCM גולמיים. לפרטים ולקידודים אחרים, ראו פורמטים של פלט אודיו.
המסוף
- פותחים את Gemini 3.8 Flash TTS או את Gemini 3.8 Flash-Lite TTS ב-Agent Studio.
- בחלונית ההגדרות, בוחרים קול מובנה, שפה (או משאירים את האפשרות זיהוי אוטומטי) ואפשר גם להוסיף תיאור של סגנון (לדוגמה,
cheerful and friendly). - מזינים את התמליל שרוצים להקריא בתיבת הפרומפט ושולחים אותו כדי ליצור, להפעיל או להוריד את קובץ האודיו בפורמט WAV. לוחצים על Get code כדי לייצא את הבקשה כ-Python, JavaScript או curl.
Python
from google import genai
client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")
response = client.models.generate_content(
model="gemini-3.8-flash-tts",
contents=[{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speech_metadata": {"style": "cheerful and friendly"},
}],
}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {"voice_config": {"voice": "Kore"}},
},
)
# The SDK has already decoded the base64 audio, so inline_data.data is a
# complete WAV file by default.
with open("out.wav", "wb") as f:
f.write(response.candidates[0].content.parts[0].inline_data.data)
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.8-flash-tts:generateContent \
-d '{
"contents": [{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speechMetadata": {"style": "cheerful and friendly"}
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"voiceConfig": {"voice": "Kore"}
}
}
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.wav
המרת טקסט לדיבור (TTS) בסטרימינג עם דובר יחיד
כדי לקבל אודיו בזמן שהמודל עדיין מסנתז אותו, משתמשים ב-method streamGenerateContent. התשובות בסטרימינג מחזירות קטעי PCM גולמיים של 16 ביט ללא כותרת (24 kHz, מונו), כך שאפשר להעביר כל קטע לנגן, לשקע או לצינור עיבוד נתונים אחר של אודיו כשהוא מגיע. בדוגמה הבאה ב-Python, הפונקציה emit_audio מייצגת את היעד הזה.
כדי לקצר את ה-TTFA, שלחו בקשות סטרימינג לנקודת הקצה במספר אזורים us או eu במקום לנקודת הקצה global (אלא אם הבקשה משתמשת בקול בהתאמה אישית, שמחייב את global).
Python
from google import genai
# Use 'us' or 'eu' for lower TTFA on streaming requests (or 'global' for custom voices)
client = genai.Client(enterprise=True, project="PROJECT_ID", location="us")
def emit_audio(pcm: bytes) -> None:
"""Sends a chunk of raw 16-bit PCM audio (24 kHz, mono) downstream."""
# Replace with your audio destination, such as a player, a WebSocket,
# or a telephony stream.
print(f"Received {len(pcm)} bytes of audio")
response_stream = client.models.generate_content_stream(
model="gemini-3.8-flash-lite-tts",
contents=[{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speech_metadata": {"style": "cheerful and friendly"},
}],
}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {"voice_config": {"voice": "Kore"}},
},
)
for chunk in response_stream:
if not chunk.candidates or not chunk.candidates[0].content:
continue
for part in chunk.candidates[0].content.parts or []:
if part.inline_data and part.inline_data.data:
emit_audio(part.inline_data.data)
REST
curl -N -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-lite-tts:streamGenerateContent?alt=sse" \
-d '{
"contents": [{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speechMetadata": {"style": "cheerful and friendly"}
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"voiceConfig": {"voice": "Kore"}
}
}
}' | sed -n 's/^data: //p' \
| jq -r '.candidates[0].content.parts[0].inlineData.data // empty' \
| while read -r chunk; do echo "$chunk" | base64 --decode; done > streamed.pcm
הקובץ streamed.pcm מכיל אודיו גולמי בפורמט PCM של 16 ביט בתדר 24kHz, מונו.
המרת טקסט לדיבור (TTS) עם מספר דוברים
בשיחה בין שני דוברים, מגדירים את שני הדוברים ב-speechConfig.multiSpeakerVoiceConfig.speakerVoiceConfigs. אחר כך מעבירים כל תור כ-part נפרד, מגדירים את speech_metadata.speaker בכל תור לאחד משמות הדוברים שהוגדרו, ומוסיפים style אופציונלי ברמת התור.
בבקשות עם כמה רמקולים צריך לבחור בדיוק שני רמקולים.
Python
from google import genai
client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")
response = client.models.generate_content(
model="gemini-3.8-flash-tts",
contents=[{
"role": "user",
"parts": [
{
"text": "How's it going today, Jane?",
"speech_metadata": {"speaker": "Joe", "style": "cheerful and friendly"},
},
{
"text": "Not too bad, how about you? Ready to test these new voices?",
"speech_metadata": {"speaker": "Jane", "style": "calm and relaxed"},
},
],
}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {
"multi_speaker_voice_config": {
"speaker_voice_configs": [
{"speaker": "Joe", "voice_config": {"voice": "Puck"}},
{"speaker": "Jane", "voice_config": {"voice": "Kore"}},
]
}
},
},
)
with open("dialogue.wav", "wb") as f:
f.write(response.candidates[0].content.parts[0].inline_data.data)
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.8-flash-tts:generateContent \
-d '{
"contents": [{
"role": "user",
"parts": [
{
"text": "How'\''s it going today, Jane?",
"speechMetadata": {"speaker": "Joe", "style": "cheerful and friendly"}
},
{
"text": "Not too bad, how about you? Ready to test these new voices?",
"speechMetadata": {"speaker": "Jane", "style": "calm and relaxed"}
}
]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"multiSpeakerVoiceConfig": {
"speakerVoiceConfigs": [
{"speaker": "Joe", "voiceConfig": {"voice": "Puck"}},
{"speaker": "Jane", "voiceConfig": {"voice": "Kore"}}
]
}
}
}
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > dialogue.wav
המרת טקסט לדיבור (TTS) בסטרימינג עם מספר דוברים
גם בקשות עם כמה דוברים תומכות בסטרימינג. משתמשים באותה בקשה כמו בהמרת טקסט לדיבור (TTS) עם מספר דוברים באמצעות השיטה streamGenerateContent, ומשתמשים בus או בeu נקודת קצה במספר אזורים כדי להפחית את ה-TTFA.
Python
from google import genai
# Use 'us' or 'eu' for lower TTFA on streaming requests
client = genai.Client(enterprise=True, project="PROJECT_ID", location="us")
def emit_audio(pcm: bytes) -> None:
"""Sends a chunk of raw 16-bit PCM audio (24 kHz, mono) downstream."""
# Replace with your audio destination, such as a player, a WebSocket,
# or a telephony stream.
print(f"Received {len(pcm)} bytes of audio")
response_stream = client.models.generate_content_stream(
model="gemini-3.8-flash-tts",
contents=[{
"role": "user",
"parts": [
{
"text": "How's it going today, Jane?",
"speech_metadata": {"speaker": "Joe", "style": "cheerful and friendly"},
},
{
"text": "Not too bad, how about you? Ready to test these new voices?",
"speech_metadata": {"speaker": "Jane", "style": "calm and relaxed"},
},
],
}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {
"multi_speaker_voice_config": {
"speaker_voice_configs": [
{"speaker": "Joe", "voice_config": {"voice": "Puck"}},
{"speaker": "Jane", "voice_config": {"voice": "Kore"}},
]
}
},
},
)
for chunk in response_stream:
if not chunk.candidates or not chunk.candidates[0].content:
continue
for part in chunk.candidates[0].content.parts or []:
if part.inline_data and part.inline_data.data:
emit_audio(part.inline_data.data)
REST
curl -N -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-tts:streamGenerateContent?alt=sse" \
-d '{
"contents": [{
"role": "user",
"parts": [
{
"text": "How'\''s it going today, Jane?",
"speechMetadata": {"speaker": "Joe", "style": "cheerful and friendly"}
},
{
"text": "Not too bad, how about you? Ready to test these new voices?",
"speechMetadata": {"speaker": "Jane", "style": "calm and relaxed"}
}
]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"multiSpeakerVoiceConfig": {
"speakerVoiceConfigs": [
{"speaker": "Joe", "voiceConfig": {"voice": "Puck"}},
{"speaker": "Jane", "voiceConfig": {"voice": "Kore"}}
]
}
}
}
}' | sed -n 's/^data: //p' \
| jq -r '.candidates[0].content.parts[0].inlineData.data // empty' \
| while read -r chunk; do echo "$chunk" | base64 --decode; done > dialogue_streamed.pcm
הקובץ dialogue_streamed.pcm מכיל אודיו גולמי בפורמט PCM של 16 ביט, בתדר 24kHz, מונו.
שליטה בסגנון הדיבור באמצעות מטא-נתונים ותגים
המודלים של Gemini 3.8 TTS מתייחסים לשדה text כתמליל מילה במילה.
יכול להיות שהוראות שכתובות בטקסט, כמו "Say cheerfully: Hello!" או "Speaker 1: Hello!", יוקראו בקול. כדי לשלוט במסירה, פצלו את ההוראות לפי היקף:
- הנחיות מתמשכות ברמת התור (
speech_metadata.style): הנחיות לגבי רגש, סגנון דיבור, פרוסודיה, קצב ועוצמת קול שחלות על כל התור צריכות להיות בתוךspeech_metadata.style. לדוגמה,"style": "whispered urgently","style": "out of breath"או"style": "warm and enthusiastic". - אירועים בנקודת זמן (תגים מוטבעים): הציבו צלילים קוליים רגעיים שאינם דיבור והפסקות בתוך התמליל בסוגריים זוויתיים. לדוגמה,
"Wait... <short pause> did you hear that? <sigh>"או"Excuse me <cough> as I was saying...".
במדריך הזה מוסבר בהרחבה איך לכתוב הנחיות.
אפשרויות קוליות
במודלים של Gemini 3.8 TTS יש ארבע דרכים לבחור או ליצור קולות:
- קולות מוגדרים מראש: 30 קולות שנבחרו בקפידה.
- ספריית קולות מורחבת: יותר מ-2,000 קולות מוגדרים מראש שנבחרו בקפידה במגוון שפות, מבטאים אזוריים ופרסונות של דמויות.
- עיצוב קול (גרסת טרום-השקה):
יוצרים קול בהתאמה אישית מתיאור בשפה טבעית באמצעות השיטה
createשל Voices API (client.voices.create()ב-Google Gen AI SDK אוPOST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices). מגדירים אתtypeל-VOICE_TYPE_PROMPTEDואתstoreל-true. התשובה מחזירה מזההvoice_...שמור ודגימה של הקול. - רפליקציה של קולות (גרסת טרום-השקה): רפליקציה של קול של דובר מקובץ עזר וקובץ אודיו של הסכמה, באמצעות אותה שיטה של
create. מגדירים אתtypeלהיותVOICE_TYPE_REPLICATED. עםstore: true, התגובה מחזירה מזההvoice_...מאוחסן. עםstore: false, הפונקציה מחזירה מפתחvoicekey_...ללא מצב.
מגבלות על קולות בהתאמה אישית ו-TTL
| הקלדה קולית | מצב אחסון | ניהול | תפוגה |
|---|---|---|---|
קולות שנשמרו (voice_..., שעוצבו או שוכפלו) |
store: true |
השיטות list, get ו-delete ב-Voices API |
שנה אחרי השימוש האחרון |
מפתחות לרפליקציה של קולות (voicekey_...) |
store: false |
מנוהל על ידי האפליקציה. Google לא שומרת את המפתח. | 7 ימים אחרי תאריך היצירה |
יצירת דיבור באמצעות קול שמור מפעילה מחדש את תקופת השמירה של שנה, כך שקול שאתם משתמשים בו באופן קבוע לא יפוג. בקשות ליצירת קולות כפופות למכסה לכל פרויקט, לדקה. אם חורגים מהמגבלה, השיטה create מחזירה את השגיאה RESOURCE_EXHAUSTED. מידע נוסף זמין במאמר מכסות ומגבלות מערכת.
אחסון ושמירה של נתונים
Google שומרת את הקלט שאתם מספקים כשאתם יוצרים קול שמור, יחד עם פריטי הקול שנוצרו מהם, ומשייכת אותם לפרויקט ב-Google Cloud שבו נוצר הקול.
כשיוצרים קול משוכפל מהקלטה של דובר, נשמרים הנתונים הבאים:
- אודיו לדוגמה: דגימה של הדובר שהקול שלו משוכפל.
- אודיו של הסכמה: הדובר מקריא את הצהרת ההסכמה הנדרשת.
כשאתם יוצרים קול מעוצב באמצעות תיאור טקסט של קול בהנחיה, נשמרים הפרטים הבאים:
- הנחיית הטקסט שכתבתם כדי לתאר את הקול.
- האודיו של הקול שנוצר מההנחיה הזו, שהמודל משתמש בו כקובץ העזר לקול.
לקול מעוצב אין אודיו של הסכמה, כי הוא נוצר מתיאור ולא מהקלטה של אדם.
קלט קולי נשמר כדי שהקול שלכם ימשיך לפעול גם אחרי עדכוני מודלים. כשהמודל הבסיסי מתעדכן, פריטי הקול נוצרים מחדש מהקלט המאוחסן. אם לא נמצאו קלטים שמורים לקול מסוים, אי אפשר ליצור מחדש את פריטי המידע שנוצרו, והקול מפסיק לפעול אחרי עדכון המודל. אחר כך תצטרכו ליצור את הקול מחדש.
הקלט שנשמר משמש רק ליצירה מחדש של הקול כשהמודלים מתעדכנים. הם מוצפנים במנוחה ומבודדים לפרויקט שבו נוצר הקול.
תקופת שמירה
הקולות וכל הנתונים המשויכים שנשמרו נשמרים למשך עד שנה (365 ימים) מהפעם האחרונה שהשתמשתם בקול כדי להמיר טקסט לדיבור. התקופה מתחילה כשיוצרים את הקול, ומתאפסת בכל פעם ששולחים בקשת המרה שמשתמשת בקול. אם לא משתמשים בקול במשך 365 ימים, הקול, הקלט ששמור בו והפריטים שנוצרו ממנו נמחקים.
מחיקה על ידי הלקוח
אתם יכולים למחוק קול בכל שלב באמצעות השיטה delete של Voices API.
כשמוחקים קול, נמחקים גם הקלט המאוחסן שלו ופריטי המידע שנוצרו ממנו. אם מוחקים את הפרויקט Google Cloud שבבעלותו הקול, גם הקול נמחק, בהתאם לתהליך המחיקה הרגיל של פרויקטים.
קולות מוגדרים מראש
ברשימה הבאה מוצגים השמות של הקולות המוכנים מראש והמאפיינים שלהם:
- Achernar: רך
- Achird: ידידותי
- Algenib: מחוספס
- Algieba: החלקה
- Alnilam: קשיח
- Aoede: קליל
- Autonoe: בהיר
- Callirrhoe: נינוח
- Charon: אינפורמטיבי
- Despina: חלק
- Enceladus: נשימתי
- Erinome: ברור
- Fenrir: נרגש
- Gacrux: בוגר
- Iapetus: ברור
- Kore: סמכותי
- Laomedeia: שמח
- Leda: צעיר
- Orus: חברה
- Puck: שמח
- Pulcherrima: תהודה קדמית
- Rasalgethi: אינפורמטיבי
- Sadachbia: תוסס
- Sadaltager: בעל ידע
- Schedar: זוגי
- Sulafat: חם
- Umbriel: נינוח
- Vindemiatrix: עדין
- Zephyr: אופטימי
- Zubenelgenubi: רגוע
ספריית קולות מורחבת
בנוסף ל-30 הקולות המוגדרים מראש, ספריית הקולות המורחבת כוללת יותר מ-2,000 קולות מוגדרים מראש שנבחרו בקפידה במגוון שפות, מבטאים אזוריים, דמויות ומקרי שימוש כמו ספרי אודיו, סוכנים בממשק שיחה וחדשות.
כדי להשתמש בקול מהספרייה, מעבירים את המזהה שלו ב-speechConfig.voiceConfig.voice, באותו אופן שבו מעבירים שם של קול מובנה.
כדי לעיין בספרייה, קוראים ל-method list של Voices API (ListVoices). הפעולה הזו מחזירה את הקולות בהתאמה אישית ששמורים בפרויקט, ואחריהם את הקולות המובְנים ואת הקולות מ-Extended Voice Library. כל קול בספרייה כולל את ה-id שלו ומטא-נתונים כמו language_code, accent, gender, pitch, persona ו-description. כדי לצמצם את התוצאות, אפשר להשתמש במסננים הבאים:
-
type: מקור הקול:prebuiltלקולות מוכנים מראש ולקולות מהספרייה,promptedלקולות מעוצבים אוreplicatedלקולות משוכפלים. אם מעבירים יותר מערך אחד, השיטה מחזירה קולות שתואמים לאחד מהם. search: טקסט להתאמה, ללא תלות ברישיות, לתיאור ולשם המוצג של כל קול.
בדוגמה הבאה, הספרייה מחפשת קולות של קריינים:
Python
from google import genai
client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")
response = client.voices.list(type_=["prebuilt"], search="narrator", page_size=50)
for voice in response.voices or []:
print(voice.id, voice.language_code, voice.gender, voice.description)
REST
curl -G \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices \
--data-urlencode "type=prebuilt" \
--data-urlencode "search=narrator" \
--data-urlencode "pageSize=50"
השיטה list מחזירה עד 50 קולות בכל דף. כדי לקבל את הדף הבא, מעבירים את הערך next_page_token מהתגובה בתור הפרמטר page_token.
פורמטים של פלט אודיו
קידוד האודיו שמוגדר כברירת מחדל תלוי בשיטה:
- בקשות Unary (
generateContent) מחזירות קובץ WAV מלא (audio/wav) עם כותרת RIFF: PCM של 16 ביט, 24kHz, מונו. - בקשות סטרימינג (
streamGenerateContent) מחזירות קטעי PCM גולמיים ללא כותרת, ב-16 ביט, עם סימן, ב-Little-endian (audio/l16) בתדר 24kHz, מונו.
כדי לבקש קידוד אחר, מגדירים את generationConfig.responseFormat לפורמט אודיו. המודלים של Gemini 3.8 TTS תומכים בערכים הבאים של mimeType:
ערך של mimeType |
פורמט | תיאור |
|---|---|---|
AUDIO_WAV (ברירת המחדל של unary) |
WAV (audio/wav) |
קובץ WAV מלא עם כותרת RIFF (PCM של 16 ביט, 24kHz, מונו). |
AUDIO_L16 (ברירת המחדל לסטרימינג) |
PCM לינארי (audio/l16) |
PCM גולמי ללא כותרת, 16 ביט, חתום, Little-endian. אפשר להשתמש בהם לסטרימינג, לצינורות עיבוד נתונים מותאמים אישית של אודיו או לשרשור של קליפים עם כמה פניות. |
AUDIO_MULAW |
μ-law (audio/mulaw) |
אודיו דחוס G.711 μ-law (8kHz, מונו), שמשמש בדרך כלל בטלפוניה בצפון אמריקה וביפן. |
AUDIO_ALAW |
A-law (audio/alaw) |
אודיו דחוס לפי חוק G.711 A (8kHz, מונו), שמשמש בדרך כלל בטלפוניה אירופאית ובינלאומית. |
המודלים מתעלמים מהשדה sampleRate. הפלט של PCM ו-WAV לינארי הוא 24kHz, והפלט של μ-law ו-A-law הוא 8kHz, בלי קשר לקצב בתגובה mimeType. אם הצינור שלכם דורש תדירות דגימה אחרת, דגמו מחדש את הפלט בלקוח.
בדוגמה הבאה נשלחת בקשה לפלט μ-law לצינור עיבוד נתונים של טלפוניה. Google Gen AI SDK ל-Python לא חושף את responseFormat ב-GenerateContentConfig, ולכן הדוגמה ב-Python מעבירה אותו בגוף הבקשה באמצעות http_options.extra_body.
Python
from google import genai
client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")
response = client.models.generate_content(
model="gemini-3.8-flash-tts",
contents=[{"role": "user", "parts": [{"text": "Have a wonderful day!"}]}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {"voice_config": {"voice": "Kore"}},
"http_options": {
"extra_body": {
"generationConfig": {
"responseFormat": [{"audio": {"mimeType": "AUDIO_MULAW"}}]
}
}
},
},
)
# The response is headerless μ-law audio at 8 kHz, mono.
with open("out.mulaw", "wb") as f:
f.write(response.candidates[0].content.parts[0].inline_data.data)
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.8-flash-tts:generateContent \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Have a wonderful day!"}]}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"responseFormat": [{"audio": {"mimeType": "AUDIO_MULAW"}}],
"speechConfig": {
"voiceConfig": {"voice": "Kore"}
}
}
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.mulaw
שפות נתמכות
המודלים של Gemini 3.8 TTS מזהים את שפת הקלט באופן אוטומטי. Gemini 3.8 Flash TTS תומך ב-132 שפות, ו-Gemini 3.8 Flash-Lite TTS תומך ב-103 שפות:
מגבלות
- המודלים של TTS מקבלים קלט של טקסט בלבד ומחזירים פלט של אודיו בלבד.
- בבקשות עם כמה רמקולים צריך לבחור בדיוק שני רמקולים. כדי לשלב קולות מעוצבים (
voice_...) או משוכפלים (voice_...אוvoicekey_...) בדיאלוג עם כמה דמויות, או כדי להשתמש ביותר משני דוברים, צריך להמיר את הדיבור של כל דובר בנפרד ולשרשר את קובצי האודיו. בקשו פלט שלAUDIO_L16לכל תור, או הסירו את כותרת ה-WAV מכל קליפ לפני שאתם משרשרים את הקליפים. - המודלים זמינים במיקומים
global,usו-eu. - קולות בהתאמה אישית בבעלות המשתמש (קולות שנוצרו באמצעות עיצוב קול או רפליקציה של קולות) זמינים רק במיקום
global. - אין תמיכה בהוראות מערכת.
- אי אפשר להגדיר את תדירות הדגימה של הפלט. אין תמיכה בפלט בפורמט MP3 ו-Ogg Opus.
המאמרים הבאים
- במדריך להנחיות מוסבר איך לשלוט בסגנון, בקצב ובצלילים הקוליים.
- ליצור קולות בהתאמה אישית מתיאור טקסט באמצעות עיצוב קול (גרסת טרום-השקה).
- לשכפל קול של דובר באמצעות רפליקציה של קולות (גרסת טרום-השקה).
- אתם יכולים לעיין במפרטים של המודלים בדפים של Gemini 3.8 Flash TTS ו-Gemini 3.8 Flash-Lite TTS.