יצירת דיבור באמצעות Gemini TTS

המודלים של Gemini להמרת טקסט לדיבור (TTS) ממירים טקסט לאודיו של דובר אחד או של כמה דוברים. אתם יכולים לשלוט בסגנון, במבטא, בקצב ובטון של האודיו באמצעות מטא-נתונים מובְנים של תור (speech_metadata) ותגי קול מוטבעים.

בדף הזה מוסבר איך ליצור דיבור באמצעות המודלים הבאים, באמצעות השיטות generateContent ו-streamGenerateContent של Gemini Enterprise API:

המודלים של TTS מותאמים להקראה מדויקת של טקסט, עם שליטה מדויקת בסגנון ובצליל, כמו קריינות, ספרי אודיו ותשובות של סוכן קולי. כדי לנהל שיחות אינטראקטיביות בזמן אמת עם קלט ופלט של אודיו, צריך להשתמש במקום זאת ב-Live API.

אם אתם משתמשים במודל TTS קודם של Gemini, כמו gemini-3.1-flash-tts-preview, כדאי לעיין במדריך להעברת נתונים.

מודלים נתמכים

דגם דובר יחיד מספר דוברים סטרימינג עיצוב קולי רפליקציה של קולות
‫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 ‏ (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 Text-to-Speech.

מתי להשתמש בכל מודל

שני מודלי ה-TTS של Gemini 3.8 חולקים את אותה סכימת בקשות ואת אותו פורמט הנחיות, כך שאפשר לעבור ביניהם על ידי שינוי מזהה המודל:

  • השתמשו ב-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, ומתאים להפקת אצוות בנפח גבוה, למערכות של סוכני קול לשיחה, לתכונות של הקראה בקול, לרפליקציה של קולות ולדיבור יומיומי של דובר יחיד בשפות עיקריות.

לפני שמתחילים

  1. מגדירים פרויקט ומפעילים את Gemini Enterprise API.
  2. מגדירים Application Default Credentials לסביבת הפיתוח.
  3. כדי להשתמש בדוגמאות של Python, צריך להתקין את גרסה 2.25.0 ואילך של Google Gen AI SDK:

    pip install --upgrade "google-genai>=2.25.0"
    

המודלים של Gemini 3.8 TTS זמינים במיקום global. שליחת בקשות לנקודת הקצה aiplatform.googleapis.com.

המרת טקסט לדיבור (TTS) עם דובר יחיד

כדי להמיר טקסט לאודיו עם דובר יחיד, מעבירים את התמליל המילולי ב-parts[].text, מוסיפים עיצוב אופציונלי ברמת התור ב-parts[].speech_metadata ומגדירים את הקול ב-speechConfig.voiceConfig.voice. בשדה voice אפשר להזין שם של קול מובנה, מזהה קול מ-Extended Voice Library או מזהה (voice_...) של קול מעוצב או משוכפל (או מפתח voicekey_... אופציונלי ללא שמירת מצב).

כברירת מחדל, בקשות unary מחזירות קובץ WAV מלא (PCM של 16 ביט, 24kHz, מונו), כך שאפשר לכתוב את בייטי האודיו ישירות לקובץ .wav. במקום זאת, בקשות סטרימינג מחזירות קטעי PCM גולמיים. פרטים על קידודים אחרים מופיעים במאמר בנושא פורמטים של פלט אודיו.

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 מייצגת את היעד הזה.

Python

from google import genai

client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")

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.googleapis.com/v1/projects/PROJECT_ID/locations/global/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.

Python

from google import genai

client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")

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.googleapis.com/v1/projects/PROJECT_ID/locations/global/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, מונו.

שליטה בסגנון הדיבור באמצעות מטא-נתונים ותגים

מודלי ה-TTS של Gemini 3.8 מתייחסים לשדה 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...".

במדריך לכתיבת הנחיות מפורט מידע נוסף.

אפשרויות קוליות

מודלי ה-TTS של Gemini 3.8 תומכים בארבע דרכים לבחירה או ליצירה של קולות:

  1. קולות שנוצרו מראש: 30 קולות שנבחרו בקפידה.
  2. ספריית קולות מורחבת: יותר מ-2,000 קולות מוגדרים מראש שנבחרו בקפידה בשפות שונות, עם מבטאים אזוריים ופרסונות של דמויות.
  3. ‫Voice design: יוצרים קול בהתאמה אישית מתיאור בשפה טבעית באמצעות השיטה Voices API create (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_... ודגימה של הקול.
  4. שכפול קול: שכפול קול של דובר מקובץ אודיו לדוגמה וקובץ אודיו של הסכמה, באמצעות אותה שיטה של 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: Clear
  • ‫Fenrir: נרגש
  • ‫Gacrux: בוגר
  • ‫Iapetus: ברור
  • ‫Kore: סמכותי
  • ‫Laomedeia: שמח
  • ‫Leda: צעיר
  • ‫Orus: Firm
  • ‫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 גולמיים (audio/l16) של 16 ביט בפורמט little-endian, ללא כותרת, ב-24‎ kHz, מונו.

כדי לבקש קידוד אחר, מגדירים את generationConfig.responseFormat לפורמט אודיו. המודלים של Gemini 3.8 TTS תומכים בערכים הבאים של mimeType:

ערך של mimeType פורמט תיאור
AUDIO_WAV (ברירת המחדל של unary) ‫WAV (audio/wav) קובץ WAV מלא עם כותרת RIFF (PCM‏ 16 ביט, 24 kHz, מונו).
AUDIO_L16 (ברירת המחדל לסטרימינג) ‫PCM לינארי (audio/l16) ‫PCM גולמי של 16 ביט חתום בפורמט little-endian ללא כותרת. אפשר להשתמש בו לסטרימינג, לצינורות אודיו מותאמים אישית או לשרשור של קליפים עם כמה תגובות.
AUDIO_MULAW ‫μ-law (audio/mulaw) אודיו דחוס לפי חוק G.711 μ ‏ (8kHz, מונו), שמשמש בדרך כלל בטלפוניה בצפון אמריקה וביפן.
AUDIO_ALAW A-law (audio/alaw) אודיו דחוס G.711 A-law‏ (8kHz, מונו), שמשמש בדרך כלל בטלפוניה אירופאית ובינלאומית.

המודלים מתעלמים מהשדה sampleRate. הפלט של Linear PCM ו-WAV הוא 24 kHz,‏ והפלט של μ-law ו-A-law הוא 8 kHz, בלי קשר לקצב בתגובה 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 תומך ב-130 שפות, ו-Gemini 3.8 Flash-Lite TTS תומך ב-101 שפות:

מגבלות

  • מודלים של TTS מקבלים קלט של טקסט בלבד ומחזירים פלט של אודיו בלבד.
  • כדי להשתמש בבקשות עם כמה דוברים, צריך לבחור בדיוק שני דוברים. כדי לשלב קולות מעוצבים (voice_...) או משוכפלים (voice_... או voicekey_...) בדיאלוג עם כמה דמויות, או כדי להשתמש ביותר משני דוברים, צריך לבצע סינתזה של כל תור דיבור בנפרד ולשרשר את האודיו. בקשו פלט של AUDIO_L16 לכל תור, או הסירו את כותרת ה-WAV מכל קליפ לפני שאתם משרשרים את הקליפים.
  • המודלים זמינים רק במיקום global.
  • אין תמיכה בהוראות מערכת.
  • אי אפשר להגדיר את תדירות הדגימה של הפלט. אין תמיכה בפלט בפורמט MP3 ו-Ogg Opus.

המאמרים הבאים