Genera voz con Gemini TTS

Los modelos de texto a voz (TTS) de Gemini convierten el texto en audio de un solo interlocutor o de varios interlocutores. Puedes controlar el estilo, el acento, el ritmo y el tono del audio con metadatos de turno estructurados (speech_metadata) y etiquetas vocales intercaladas.

En esta página, se muestra cómo generar voz con los siguientes modelos a través de los métodos generateContent y streamGenerateContent de la API de Gemini Enterprise:

Los modelos de TTS están diseñados para la recitación de texto exacto con un control detallado sobre el estilo y el sonido, como la narración, los audiolibros y las respuestas de los agentes de voz. Para conversaciones interactivas en tiempo real con entrada y salida de audio, usa la API de Live.

Si usas un modelo de Gemini TTS anterior, como gemini-3.1-flash-tts-preview, consulta la guía de migración.

Modelos compatibles

Modelo Orador único Varios oradores Transmisión Diseño de voz Replicación de voz
Gemini 3.8 Flash TTS (gemini-3.8-flash-tts)
Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts)
Vista previa de TTS de Gemini 3.1 Flash (gemini-3.1-flash-tts-preview)
TTS de Gemini 2.5 Pro (gemini-2.5-pro-tts)
TTS de Gemini 2.5 Flash (gemini-2.5-flash-tts)

Las muestras y las funciones de esta página se aplican a los modelos de TTS de Gemini 3.8. Para los modelos anteriores, consulta Gemini-TTS en laGoogle Cloud documentación de Text-to-Speech.

Cuándo usar cada modelo

Ambos modelos de TTS de Gemini 3.8 comparten el mismo esquema de solicitud y formato de instrucciones, por lo que puedes cambiar entre ellos modificando el ID del modelo:

  • Usa Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) cuando la fidelidad acústica, la actuación con matices y el control expresivo sean la máxima prioridad. Es adecuado para trabajos creativos con calidad de estudio, diálogos complejos con varios oradores, etiquetas frecuentes de ráfagas vocales, pronunciaciones difíciles, dialectos regionales o minoritarios, y narraciones de formato largo que necesitan una voz y un tono de sala estables.
  • Usa Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) para cargas de trabajo de producción rápidas y rentables. Es el reemplazo recomendado para gemini-3.1-flash-tts-preview y es adecuado para la producción por lotes de gran volumen, las cascadas de agentes de voz conversacionales, las funciones de lectura en voz alta, la replicación de voz y el habla diaria de un solo interlocutor en los idiomas principales.

Antes de comenzar

  1. Configura un proyecto y habilita la API de Gemini Enterprise.
  2. Configura las credenciales predeterminadas de la aplicación para tu entorno de desarrollo.
  3. Para usar las muestras de Python, instala la versión 2.25.0 o posterior del SDK de IA generativa de Google:

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

Los modelos de Gemini 3.8 TTS están disponibles en la ubicación global. Envía solicitudes al extremo aiplatform.googleapis.com.

TTS de un solo interlocutor

Para convertir texto en audio de un solo interlocutor, pasa la transcripción literal en parts[].text, agrega un estilo opcional a nivel de turno en parts[].speech_metadata y establece la voz en speechConfig.voiceConfig.voice. El campo voice acepta un nombre de voz prediseñada, un ID de voz de la Biblioteca de voces extendida o el ID (voice_...) de una voz diseñada o replicada (o una clave voicekey_... sin estado opcional).

De forma predeterminada, las solicitudes unarias devuelven un archivo WAV completo (PCM de 16 bits, 24 kHz, mono), por lo que puedes escribir los bytes de audio directamente en un archivo .wav. En cambio, las solicitudes de transmisión devuelven fragmentos de PCM sin procesar. Para obtener detalles y otras codificaciones, consulta Formatos de salida de 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

TTS de transmisión de un solo interlocutor

Para recibir audio mientras el modelo aún lo sintetiza, usa el método streamGenerateContent. Las respuestas de transmisión devuelven fragmentos de PCM sin procesar de 16 bits sin encabezado (24 kHz, mono), por lo que puedes pasar cada fragmento a un reproductor, un socket o otra canalización de audio a medida que llega. En el siguiente ejemplo de Python, la función emit_audio representa ese destino.

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

El archivo streamed.pcm contiene audio PCM sin procesar de 16 bits a 24 kHz, mono.

TTS con varios interlocutores

Para el diálogo entre dos interlocutores, configura ambos interlocutores en speechConfig.multiSpeakerVoiceConfig.speakerVoiceConfigs. Luego, pasa cada turno como un part independiente, establece speech_metadata.speaker en cada turno en uno de los nombres de interlocutor configurados y agrega un style opcional a nivel del turno.

Las solicitudes de varios interlocutores requieren exactamente dos interlocutores.

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 de transmisión con varios interlocutores

Las solicitudes de varios interlocutores también admiten la transmisión. Usa la misma solicitud que en TTS con varios oradores con el método 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

El archivo dialogue_streamed.pcm contiene audio PCM sin procesar de 16 bits a 24 kHz, mono.

Controla el estilo de voz con metadatos y etiquetas

Los modelos de Gemini 3.8 TTS tratan el campo text como una transcripción literal. Es posible que se lean en voz alta las instrucciones escritas en el texto, como "Say cheerfully: Hello!" o "Speaker 1: Hello!". Para controlar la entrega, divide tus instrucciones por alcance:

  • Publicación sostenida a nivel de turno (speech_metadata.style): Coloca la emoción, el estilo de publicación, la prosodia, el ritmo y el volumen que se aplican a un turno completo en speech_metadata.style. Por ejemplo, "style": "whispered urgently", "style": "out of breath" o "style": "warm and enthusiastic".
  • Eventos de un momento determinado (etiquetas intercaladas): Coloca sonidos vocales momentáneos que no sean de voz y pausas dentro de la transcripción entre corchetes angulares. Por ejemplo, "Wait... <short pause> did you hear that? <sigh>" o "Excuse me <cough> as I was saying...".

Para obtener más orientación, consulta la guía de instrucciones.

Opciones de voz

Los modelos de Gemini 3.8 TTS admiten cuatro formas de seleccionar o crear voces:

  1. Voces prediseñadas: 30 voces seleccionadas.
  2. Biblioteca de voces extendida: Más de 2,000 voces predeterminadas seleccionadas en diferentes idiomas, acentos regionales y arquetipos de personajes
  3. Diseño de voz: Crea una voz personalizada a partir de una descripción en lenguaje natural con el método create de la API de Voices (client.voices.create() en el SDK de IA generativa de Google o POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices). Establece type en VOICE_TYPE_PROMPTED y store en true. La respuesta devuelve un ID de voice_... almacenado y una muestra de la voz.
  4. Replicación de voz: Replica la voz de un orador a partir de audio de referencia y consentimiento con el mismo método de create. Establece type en VOICE_TYPE_REPLICATED. Con store: true, la respuesta devuelve un ID de voice_... almacenado. Con store: false, se devuelve una clave voicekey_... sin estado.

Límites de voz personalizada y TTL

Tipo de voz Modo de almacenamiento Administración Vencimiento
Voces almacenadas (voice_..., diseñadas o replicadas) store: true Métodos list, get y delete de la API de Voices 1 año después del último uso
Claves de replicación de voz (voicekey_...) store: false Administrado por tu aplicación. Google no retiene la clave. 7 días después de la creación

Cuando se genera voz con una voz almacenada, se reinicia su período de retención de un año, por lo que no vence una voz que usas con regularidad. Las solicitudes de creación de voces están sujetas a una cuota por proyecto y por minuto. Si lo superas, el método create devuelve un error RESOURCE_EXHAUSTED. Para obtener más información, consulta Cuotas y límites del sistema.

Almacenamiento y retención de datos

Google almacena las entradas que proporcionas cuando creas una voz almacenada, junto con los artefactos de voz derivados de ellas, en asociación con el proyecto deGoogle Cloud que creó la voz.

Cuando creas una voz replicada a partir de la grabación de un orador, se almacena lo siguiente:

  • Audio de referencia: Es la muestra del interlocutor cuya voz se replica.
  • Audio de consentimiento: Es el interlocutor que lee la declaración de consentimiento obligatoria.

Cuando creas una voz diseñada con una descripción de texto de una voz en una instrucción, se almacena lo siguiente:

  • La instrucción de texto que escribiste para describir la voz.
  • El audio de voz generado a partir de esa instrucción, que el modelo usa como referencia para la voz.

Una voz diseñada no tiene audio de consentimiento, ya que se genera a partir de una descripción y no de la grabación de una persona.

Las entradas de voz se almacenan para que tu voz siga funcionando en las actualizaciones del modelo. Los artefactos de voz se vuelven a generar a partir de las entradas almacenadas cuando se actualiza el modelo subyacente. Si no se encuentran entradas almacenadas para una voz, no se pueden regenerar sus artefactos y la voz deja de funcionar después de una actualización del modelo. Luego, debes volver a crear la voz.

Las entradas almacenadas se usan solo para volver a generar la voz cuando se actualizan los modelos. Se encriptan en reposo y se aíslan en el proyecto que creó la voz.

Período de retención

Las voces y todos los datos almacenados asociados se conservan durante un máximo de un año (365 días) desde la última vez que usaste la voz para sintetizar el habla. El período comienza cuando creas la voz y se restablece cada vez que envías una solicitud de síntesis que usa la voz. Si no se usa una voz durante 365 días, se borrarán la voz, sus entradas almacenadas y sus artefactos derivados.

Borrado por el cliente

Puedes borrar una voz en cualquier momento con el método delete de la API de Voices. Si borras una voz, se borrarán sus entradas almacenadas y los artefactos derivados. Si borras el proyecto de Google Cloud propietario de una voz, también se borrará la voz, según el proceso estándar de eliminación de proyectos.

Voces prediseñadas

En la siguiente lista, se muestra cada nombre de voz precompilada y su característica:

  • Achernar: Suave
  • Achird: Amigable
  • Algenib: Gravoso
  • Algieba: Suave
  • Alnilam: Firme
  • Aoede: Voz agradable
  • Autonoe: Brillante
  • Callirrhoe: Tranquila
  • Charon: Informativa
  • Despina: Suave
  • Enceladus: Voz entrecortada
  • Erinome: Borrar
  • Fenrir: Entusiasta
  • Gacrux: Mayores de edad
  • Iapetus: Voz clara
  • Kore: Firme
  • Laomedeia: Alegre
  • Leda: Joven
  • Orus: Firme
  • Puck: Alegre
  • Pulcherrima: Voz decidida
  • Rasalgethi: Informativa
  • Sadachbia: Alegre
  • Sadaltager: Voz experta
  • Schedar: Uniforme
  • Sulafat: Cálido
  • Umbriel: Tranquilo
  • Vindemiatrix: Amable
  • Zephyr: Alegre
  • Zubenelgenubi: Informal

Biblioteca de voces extendida

Además de las 30 voces prediseñadas, la Biblioteca de voces extendida proporciona más de 2,000 voces predeterminadas seleccionadas en diferentes idiomas, acentos regionales, arquetipos de personajes y casos de uso, como audiolibros, agentes conversacionales y noticias. Para usar una voz de biblioteca, pasa su ID en speechConfig.voiceConfig.voice, de la misma manera en que pasas el nombre de una voz prediseñada.

Para explorar la biblioteca, llama al método list de la API de Voices (ListVoices). Este devuelve las voces personalizadas almacenadas en tu proyecto, seguidas de las voces prediseñadas y las de la Biblioteca de voces extendida. Cada voz de la biblioteca incluye su id y metadatos, como language_code, accent, gender, pitch, persona y description. Para limitar los resultados, usa los siguientes filtros:

  • type: Es la fuente de la voz: prebuilt para las voces prediseñadas y de la biblioteca, prompted para las voces diseñadas o replicated para las voces replicadas. Si pasas más de un valor, el método devuelve las voces que coinciden con cualquiera de ellos.
  • search: Es el texto que se debe hacer coincidir, sin distinguir mayúsculas de minúsculas, con el nombre visible y la descripción de cada voz.

En el siguiente ejemplo, se busca en la biblioteca voces de narrador:

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"

El método list devuelve hasta 50 voces por página. Para obtener la página siguiente, pasa el valor de next_page_token de la respuesta como el parámetro page_token.

Formatos de salida de audio

La codificación de audio predeterminada depende del método:

  • Las solicitudes unarias (generateContent) devuelven un archivo WAV completo (audio/wav) con un encabezado RIFF: PCM de 16 bits, 24 kHz, mono.
  • Las solicitudes de transmisión (streamGenerateContent) devuelven fragmentos de PCM sin encabezado, sin procesar, de 16 bits, con signo, little-endian (audio/l16) a 24 kHz, mono.

Para solicitar una codificación diferente, configura generationConfig.responseFormat en un formato de audio. Los modelos de Gemini 3.8 TTS admiten los siguientes valores de mimeType:

Valor mimeType Formato Descripción
AUDIO_WAV (unario predeterminado) WAV (audio/wav) Es un archivo WAV completo con un encabezado RIFF (PCM de 16 bits, 24 kHz, mono).
AUDIO_L16 (predeterminado para la transmisión) PCM lineal (audio/l16) PCM sin encabezado, sin procesar, de 16 bits, con signo y con formato little-endian. Se usa para la transmisión, las canalizaciones de audio personalizadas o la concatenación de clips de varios turnos.
AUDIO_MULAW Ley μ (audio/mulaw) Audio comprimido con la ley μ de G.711 (8 kHz, mono), que se usa de uso frecuente en la telefonía de Norteamérica y Japón.
AUDIO_ALAW Ley A (audio/alaw) Audio comprimido con ley A de G.711 (8 kHz, mono), que se usa comúnmente en la telefonía europea e internacional.

Los modelos ignoran el campo sampleRate. La salida de PCM lineal y WAV es de 24 kHz, y la salida de μ-law y A-law es de 8 kHz, independientemente de la tasa en la respuesta mimeType. Vuelve a muestrear el resultado en el cliente si tu canalización requiere una tasa de muestreo diferente.

En el siguiente ejemplo, se solicita la salida de ley μ para una canalización de telefonía. El SDK de IA generativa de Google para Python no expone responseFormat en GenerateContentConfig, por lo que la muestra de Python lo pasa en el cuerpo de la solicitud con 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

Lenguajes compatibles

Los modelos de Gemini 3.8 TTS detectan el idioma de entrada automáticamente. Gemini 3.8 Flash TTS admite 130 idiomas y Gemini 3.8 Flash-Lite TTS admite 101 idiomas:

Limitaciones

  • Los modelos de TTS aceptan solo entradas de texto y devuelven solo salidas de audio.
  • Las solicitudes de varios interlocutores requieren exactamente dos interlocutores. Para combinar voces diseñadas (voice_...) o replicadas (voice_... o voicekey_...) en diálogos de varios personajes, o para usar más de dos interlocutores, sintetiza el turno de cada interlocutor de forma individual y concatena el audio. Solicita la salida AUDIO_L16 para cada turno o quita el encabezado WAV de cada clip antes de concatenarlos.
  • Los modelos solo están disponibles en la ubicación global.
  • No se admiten las instrucciones del sistema.
  • No puedes establecer la tasa de muestreo de salida. No se admiten las salidas en MP3 ni Ogg Opus.

¿Qué sigue?