Générer de la parole avec Gemini TTS

Les modèles de synthèse vocale (TTS) Gemini convertissent du texte en contenu audio à un ou plusieurs locuteurs. Vous pouvez contrôler le style, l'accent, le rythme et le ton de l'audio avec des métadonnées structurées de tour (speech_metadata) et des balises vocales intégrées.

Cette page vous explique comment générer de la parole avec les modèles suivants à l'aide des méthodes generateContent et streamGenerateContent de l'API Gemini Enterprise :

Les modèles TTS sont conçus pour la récitation exacte de texte avec un contrôle précis du style et du son, comme la narration, les livres audio et les réponses des agents vocaux. Pour des conversations interactives en temps réel avec entrée et sortie audio, utilisez plutôt l'API Live.

Si vous utilisez un modèle Gemini TTS antérieur, tel que gemini-3.1-flash-tts-preview, consultez le guide de migration.

Modèles compatibles

Modèle Un seul locuteur Multi-locuteur Streaming Conception de la voix Réplication vocale
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)

Les exemples et les fonctionnalités de cette page s'appliquent aux modèles TTS Gemini 3.8. Pour les modèles précédents, consultez Gemini-TTS dans la documentationGoogle Cloud Text-to-Speech.

Quand utiliser quel modèle

Les deux modèles Gemini 3.8 TTS partagent le même schéma de requête et le même format d'invite. Vous pouvez donc passer de l'un à l'autre en modifiant l'ID du modèle :

  • Utilisez Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) lorsque la fidélité acoustique, le jeu nuancé et le contrôle expressif sont les priorités absolues. Il convient aux travaux de création de qualité studio, aux dialogues complexes à plusieurs locuteurs, aux tags de rafales vocales fréquentes, aux prononciations difficiles, aux dialectes régionaux ou minoritaires, et aux narrations longues qui nécessitent une voix stable et un bruit ambiant.
  • Utilisez Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) pour les charges de travail de production rapides et économiques. Il s'agit du remplacement recommandé pour gemini-3.1-flash-tts-preview. Il convient à la production par lots à fort volume, aux cascades d'agents vocaux conversationnels, aux fonctionnalités de lecture à voix haute, à la réplication vocale et à la parole quotidienne sur une seule enceinte dans les principales langues.

Avant de commencer

  1. Configurez un projet et activez l'API Gemini Enterprise.
  2. Configurez les identifiants par défaut de l'application pour votre environnement de développement.
  3. Pour utiliser les exemples Python, installez la version 2.25.0 ou ultérieure du SDK Google Gen AI :

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

Les modèles Gemini 3.8 TTS sont disponibles dans la région global. Envoyez des requêtes au point de terminaison aiplatform.googleapis.com.

TTS à locuteur unique

Pour convertir du texte en audio à une seule voix, transmettez la transcription verbatim dans parts[].text, ajoutez un style facultatif au niveau du tour dans parts[].speech_metadata et définissez la voix dans speechConfig.voiceConfig.voice. Le champ voice accepte le nom d'une voix prédéfinie, l'ID d'une voix de la bibliothèque vocale étendue ou l'ID (voice_...) d'une voix conçue ou répliquée (ou une clé voicekey_... sans état facultative).

Par défaut, les requêtes unaires renvoient un fichier WAV complet (PCM 16 bits, 24 kHz, mono). Vous pouvez donc écrire les octets audio directement dans un fichier .wav. Les requêtes de streaming renvoient plutôt des blocs PCM bruts. Pour en savoir plus et découvrir d'autres encodages, consultez Formats de sortie audio.

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

Synthèse vocale en streaming avec un seul locuteur

Pour recevoir l'audio pendant que le modèle le synthétise, utilisez la méthode streamGenerateContent. Les réponses en streaming renvoient des fragments PCM bruts de 16 bits sans en-tête (24 kHz, mono). Vous pouvez ainsi transmettre chaque fragment à un lecteur, un socket ou un autre pipeline audio dès qu'il arrive. Dans l'exemple Python suivant, la fonction emit_audio représente cette destination.

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

Le fichier streamed.pcm contient un fichier audio PCM 16 bits brut à 24 kHz, mono.

TTS multilocuteur

Pour un dialogue entre deux locuteurs, configurez les deux locuteurs dans speechConfig.multiSpeakerVoiceConfig.speakerVoiceConfigs. Transmettez ensuite chaque tour de parole en tant que part distinct, définissez speech_metadata.speaker sur chaque tour de parole sur l'un des noms de locuteurs configurés et ajoutez un style facultatif au niveau du tour de parole.

Les requêtes multi-locuteurs nécessitent exactement deux locuteurs.

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

Synthèse vocale en streaming avec plusieurs locuteurs

Les requêtes multi-locuteurs sont également compatibles avec le streaming. Utilisez la même requête que dans Synthèse vocale avec plusieurs locuteurs avec la méthode 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

Le fichier dialogue_streamed.pcm contient de l'audio PCM 16 bits brut à 24 kHz, mono.

Contrôler le style de parole avec des métadonnées et des tags

Les modèles Gemini 3.8 TTS traitent le champ text comme une transcription textuelle. Les instructions écrites dans le texte, telles que "Say cheerfully: Hello!" ou "Speaker 1: Hello!", peuvent être lues à voix haute. Pour contrôler la diffusion, divisez vos instructions par champ d'application :

  • Diffusion continue au niveau du tour de parole (speech_metadata.style) : placez l'émotion, le style de diffusion, la prosodie, le rythme et le volume qui s'appliquent à un tour de parole entier dans speech_metadata.style. Par exemple, "style": "whispered urgently", "style": "out of breath" ou "style": "warm and enthusiastic".
  • Événements ponctuels (balises intégrées) : placez les sons vocaux non verbaux momentanés et les pauses dans la transcription entre crochets. Par exemple, "Wait... <short pause> did you hear that? <sigh>" ou "Excuse me <cough> as I was saying...".

Pour en savoir plus, consultez le guide sur les prompts.

Options vocales

Les modèles Gemini 3.8 TTS proposent quatre façons de sélectionner ou de créer des voix :

  1. Voix prédéfinies : 30 voix sélectionnées.
  2. Bibliothèque de voix étendue : plus de 2 000 voix prédéfinies sélectionnées dans différentes langues, accents régionaux et personnages.
  3. Conception de voix : créez une voix personnalisée à partir d'une description en langage naturel avec la méthode Voices.create create (client.voices.create() dans le SDK Google Gen AI ou POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices). Définissez type sur VOICE_TYPE_PROMPTED et store sur true. La réponse renvoie un ID voice_... stocké et un échantillon de la voix.
  4. Réplication de la voix : répliquez la voix d'un locuteur à partir d'un audio de référence et de consentement avec la même méthode create. Définissez type sur VOICE_TYPE_REPLICATED. Avec store: true, la réponse renvoie un ID voice_... stocké. Avec store: false, elle renvoie une clé voicekey_... sans état.

Limites et TTL des voix personnalisées

Type de voix Mode de stockage Gestion Expiration
Voix stockées (voice_..., conçues ou répliquées) store: true Méthodes list, get et delete de l'API Voices Un an après la dernière utilisation
Clés de réplication vocale (voicekey_...) store: false Géré par votre application. Google ne conserve pas la clé. 7 jours après la création

La génération de voix avec une voix stockée redémarre sa période de conservation d'un an. Ainsi, une voix que vous utilisez régulièrement n'expire pas. Les requêtes de création de voix sont soumises à un quota par projet et par minute. Si vous le dépassez, la méthode create renvoie une erreur RESOURCE_EXHAUSTED. Pour en savoir plus, consultez Quotas et limites du système.

Stockage et conservation des données

Google stocke les entrées que vous fournissez lorsque vous créez une voix stockée, ainsi que les artefacts vocaux qui en découlent, en association avec le projetGoogle Cloud qui a créé la voix.

Lorsque vous créez une voix répliquée à partir de l'enregistrement d'un locuteur, les éléments suivants sont stockés :

  • Audio de référence : échantillon de l'intervenant dont la voix est répliquée.
  • Audio d'autorisation : l'intervenant lisant la déclaration d'autorisation requise.

Lorsque vous créez une voix conçue à l'aide d'une description textuelle d'une voix dans un prompt, les éléments suivants sont stockés :

  • Le prompt textuel que vous avez écrit pour décrire la voix.
  • L'audio de la voix généré à partir de cette requête, que le modèle utilise comme référence pour la voix.

Une voix conçue n'a pas d'audio de consentement, car elle est générée à partir d'une description plutôt que d'un enregistrement d'une personne.

Les entrées vocales sont stockées pour que votre voix continue de fonctionner après les mises à jour du modèle. Les artefacts vocaux sont régénérés à partir des entrées stockées lorsque le modèle sous-jacent est mis à jour. Si aucune entrée stockée n'est trouvée pour une voix, ses artefacts ne peuvent pas être régénérés et la voix cesse de fonctionner après une mise à jour du modèle. Vous devez ensuite recréer la voix.

Les entrées stockées ne sont utilisées que pour régénérer la voix lorsque les modèles sont mis à jour. Elles sont chiffrées au repos et isolées dans le projet qui a créé la voix.

Durée de conservation

Les voix et toutes les données stockées associées sont conservées pendant un an (365 jours) à compter de la dernière fois où vous avez utilisé la voix pour synthétiser la parole. La période commence lorsque vous créez la voix et est réinitialisée chaque fois que vous envoyez une demande de synthèse qui utilise la voix. Si une voix n'est pas utilisée pendant 365 jours, elle est supprimée, ainsi que ses entrées stockées et ses artefacts dérivés.

Suppression par le client

Vous pouvez supprimer une voix à tout moment à l'aide de la méthode delete de l'API Voices. La suppression d'une voix entraîne la suppression de ses entrées stockées et de ses artefacts dérivés. La suppression du projet Google Cloud propriétaire d'une voix entraîne également la suppression de cette voix, conformément au processus standard de suppression de projet.

Voix prédéfinies

La liste suivante présente chaque nom de voix prédéfinie et sa caractéristique :

  • Achernar : Doux
  • Achird : amical
  • Algenib : Gravelly
  • Algieba : fluide
  • Alnilam : affirmée
  • Aoede : joviale
  • Autonoé : joyeuse
  • Callirrhoe : tranquille
  • Charon : informative
  • Despina : douce
  • Encelade : voix chuchotée
  • Erinome : claire
  • Fenrir : nerveuse
  • Gacrux : mature
  • Japet : claire
  • Kore : affirmée
  • Laomedeia : optimiste
  • Leda : jeune
  • Orus : ferme
  • Puck : optimiste
  • Pulcherrima : franche
  • Rasalgethi : informatif
  • Sadachbia : Lively
  • Sadaltager : éclairée
  • Schedar : pair
  • Sulafat : chaleureuse
  • Umbriel : décontractée
  • Vindemiatrix : agréable
  • Zephyr : joyeuse
  • Zubenelgenubi : décontractée

Bibliothèque vocale étendue

En plus des 30 voix prédéfinies, la bibliothèque de voix étendue propose plus de 2 000 voix prédéfinies sélectionnées dans différentes langues, accents régionaux, personnages et cas d'utilisation tels que les livres audio, les agents conversationnels et les actualités. Pour utiliser une voix de la bibliothèque, transmettez son ID dans speechConfig.voiceConfig.voice, de la même manière que vous transmettez un nom de voix prédéfinie.

Pour parcourir la bibliothèque, appelez la méthode list de l'API Voices (ListVoices). Elle renvoie les voix personnalisées stockées dans votre projet, suivies des voix prédéfinies et de la bibliothèque de voix étendue. Chaque voix de la bibliothèque inclut son id et ses métadonnées, telles que language_code, accent, gender, pitch, persona et description. Pour affiner les résultats, utilisez les filtres suivants :

  • type : source de la voix : prebuilt pour les voix prédéfinies et de la bibliothèque, prompted pour les voix conçues ou replicated pour les voix répliquées. Si vous transmettez plusieurs valeurs, la méthode renvoie les voix qui correspondent à l'une d'entre elles.
  • search : texte à faire correspondre, non sensible à la casse, au nom à afficher et à la description de chaque voix.

L'exemple suivant recherche des voix de narrateur dans la bibliothèque :

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"

La méthode list renvoie jusqu'à 50 voix par page. Pour obtenir la page suivante, transmettez la valeur next_page_token de la réponse en tant que paramètre page_token.

Formats de sortie audio

L'encodage audio par défaut dépend de la méthode :

  • Les requêtes unaires (generateContent) renvoient un fichier WAV complet (audio/wav) avec un en-tête RIFF : PCM 16 bits, 24 kHz, mono.
  • Les requêtes de streaming (streamGenerateContent) renvoient des fragments PCM bruts 16 bits signés little-endian sans en-tête (audio/l16) à 24 kHz, mono.

Pour demander un autre encodage, définissez generationConfig.responseFormat sur un format audio. Les modèles Gemini 3.8 TTS sont compatibles avec les valeurs mimeType suivantes :

Valeur mimeType Format Description
AUDIO_WAV (par défaut pour les opérations unaires) WAV (audio/wav) Fichier WAV complet avec un en-tête RIFF (PCM 16 bits, 24 kHz, mono).
AUDIO_L16 (par défaut pour le streaming) PCM linéaire (audio/l16) PCM little-endian 16 bits signé brut sans en-tête. Utilisez-le pour le streaming, les pipelines audio personnalisés ou la concaténation de clips multi-tours.
AUDIO_MULAW Loi μ (audio/mulaw) Audio compressé G.711 μ-law (8 kHz, mono), couramment utilisé dans la téléphonie nord-américaine et japonaise.
AUDIO_ALAW Loi A (audio/alaw) Audio compressé G.711 loi A (8 kHz, mono), couramment utilisé dans la téléphonie européenne et internationale.

Les modèles ignorent le champ sampleRate. La sortie PCM linéaire et WAV est de 24 kHz, et la sortie μ-law et A-law est de 8 kHz, quel que soit le taux dans la réponse mimeType. Rééchantillonnez la sortie sur le client si votre pipeline nécessite un taux d'échantillonnage différent.

L'exemple suivant demande une sortie μ-law pour un pipeline de téléphonie. Le SDK Google Gen AI pour Python n'expose pas responseFormat dans GenerateContentConfig. Par conséquent, l'exemple Python le transmet dans le corps de la requête avec 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

Langues disponibles

Les modèles Gemini 3.8 TTS détectent automatiquement la langue d'entrée. Gemini 3.8 Flash TTS est compatible avec 130 langues, et Gemini 3.8 Flash-Lite TTS avec 101 langues :

Limites

  • Les modèles TTS acceptent les entrées textuelles uniquement et renvoient des sorties audio uniquement.
  • Les requêtes à plusieurs speakers nécessitent exactement deux speakers. Pour combiner des voix conçues (voice_...) ou répliquées (voice_... ou voicekey_...) dans un dialogue à plusieurs personnages, ou pour utiliser plus de deux locuteurs, synthétisez le tour de chaque locuteur individuellement et concaténez l'audio. Demandez une sortie AUDIO_L16 pour chaque tour ou supprimez l'en-tête WAV de chaque extrait avant de les concaténer.
  • Les modèles ne sont disponibles que dans l'emplacement global.
  • Les instructions système ne sont pas acceptées.
  • Vous ne pouvez pas définir le taux d'échantillonnage de sortie. Les formats de sortie MP3 et Ogg Opus ne sont pas compatibles.

Étapes suivantes