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 usando los
métodos generateContent y streamGenerateContent de la API de Gemini Enterprise:
- Gemini 3.8 Flash TTS
(
gemini-3.8-flash-tts) - Gemini 3.8 Flash-Lite TTS
(
gemini-3.8-flash-lite-tts)
Los modelos de TTS se adaptan para la recitación exacta de texto con un control detallado del estilo y el sonido, como la narración, los audiolibros y las respuestas de los agentes de voz. Para mantener conversaciones interactivas en tiempo real con entrada y salida de audio, usa la API de Gemini Live.
Si usas un modelo de Gemini TTS anterior, como gemini-3.1-flash-tts-preview,
consulta la
guía de migración.
Para probar la generación de voz de un solo interlocutor sin escribir código, abre Gemini 3.8 Flash TTS en Agent Studio:
Prueba Gemini 3.8 TTS en Agent Studio
Modelos compatibles
| Modelo | Orador único | Varios oradores | Transmisión | Diseño de voz (versión preliminar) | Replicación de voz (versión preliminar) |
|---|---|---|---|---|---|
Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) |
|||||
Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) |
|||||
Versión preliminar 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 funciones de esta página se aplican a los modelos de Gemini 3.8 TTS. Para los modelos anteriores, consulta Gemini-TTS en la documentación de Text-to-Speech deGoogle Cloud .
Cuándo usar cada modelo
Ambos modelos de Gemini 3.8 TTS 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 el trabajo creativo de nivel de estudio, diálogos complejos con varios interlocutores, 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 paragemini-3.1-flash-tts-previewy se adapta a 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 cotidiana de un solo interlocutor en los idiomas principales.
Antes de comenzar
- Configura un proyecto y habilita la API de Gemini Enterprise.
- Configura las credenciales predeterminadas de la aplicación para tu entorno de desarrollo.
Para usar las muestras de Python, instala la versión 2.33.0 o una posterior del SDK de IA generativa de Google:
pip install --upgrade "google-genai>=2.33.0"
Ubicaciones y extremos regionales disponibles
Los modelos de Gemini 3.8 TTS están disponibles en la ubicación global y en las ubicaciones multirregionales us
y eu:
| Ubicación | Parámetro de ubicación | Extremo |
|---|---|---|
| Global | global |
https://aiplatform.googleapis.com |
| Estados Unidos (multirregión) | us |
https://aiplatform.us.rep.googleapis.com |
| Unión Europea (multirregión) | eu |
https://aiplatform.eu.rep.googleapis.com |
Para reducir el tiempo hasta el primer audio (TTFA) en las solicitudes de transmisión, usa el extremo multirregional us o
eu en lugar del extremo global. El extremo global
enruta las solicitudes entre regiones de todo el mundo, lo que puede aumentar la latencia de la red
antes de que llegue el primer fragmento de audio.
Para dirigir las solicitudes a un extremo regional, configura location="us" (o
location="eu") cuando inicialices el cliente en el SDK o envía solicitudes al
nombre de host multirregional correspondiente (https://aiplatform.us.rep.googleapis.com
o https://aiplatform.eu.rep.googleapis.com) con la ruta de acceso de ubicación coincidente
en la URL de 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 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
el nombre de una voz precompilada, 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.
Console
- Abre Gemini 3.8 Flash TTS o Gemini 3.8 Flash-Lite TTS en Agent Studio.
- En el panel de configuración, elige una Voz precompilada, un Idioma (o
mantén Detección automática) y una descripción opcional de Estilo (por
ejemplo,
cheerful and friendly). - Ingresa la transcripción que se dirá en el cuadro de instrucción y envíala para generar, reproducir o descargar el audio WAV. Haz clic en Obtener código para exportar la solicitud como Python, JavaScript o 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 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.
Para reducir el TTFA, envía solicitudes de transmisión al extremo multirregional
us o eu en lugar del extremo global
(a menos que tu solicitud use una voz personalizada, que requiere 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
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 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 de varios interlocutores con el método streamGenerateContent
y usa el extremo multirregional us o eu
para obtener un TTFA más bajo.
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
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:
- Presentación sostenida a nivel de turno (
speech_metadata.style): Agrega emoción, estilo de presentación, prosodia, ritmo y volumen que se apliquen a un turno completo enspeech_metadata.style. Por ejemplo,"style": "whispered urgently","style": "out of breath"o"style": "warm and enthusiastic". - Eventos puntuales (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:
- Voces prediseñadas: 30 voces seleccionadas.
- Biblioteca de voces extendida: Más de 2,000 voces predeterminadas seleccionadas en varios idiomas, acentos regionales y personalidades de personajes.
- Diseño de voz (versión preliminar):
Crea una voz personalizada a partir de una descripción en lenguaje natural con el método
createde la API de Voices (client.voices.create()en el SDK de IA generativa de Google oPOST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices). EstablecetypeenVOICE_TYPE_PROMPTEDystoreentrue. La respuesta devuelve un ID devoice_...almacenado y una muestra de la voz. - Replicación de voz (versión preliminar):
Replica la voz de un interlocutor a partir del audio de referencia y de consentimiento con el mismo
método
create. EstablecetypecomoVOICE_TYPE_REPLICATED. Constore: true, la respuesta devuelve un ID devoice_...almacenado. Constore: false, devuelve una clavevoicekey_...sin estado.
Límites y TTL de la voz personalizada
| 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 conserva la clave. | 7 días después de la creación |
Generar voz con una voz almacenada reinicia su período de retención de un año,
por lo que una voz que usas con regularidad no vence. 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
devolverá 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 interlocutor, 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 una 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 volver a generar 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 la voz. 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 se borra una voz, se borran sus entradas almacenadas y sus artefactos derivados. Si borras
el proyecto de Google Cloud propietario de una voz, también se borrarán las voces, 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: Voz ronca
- Algieba: Suave
- Alnilam: Firme
- Aoede: Breezy
- Autonoe: Brillante
- Callirrhoe: Voz tranquila
- Charon: Informativa
- Despina: Suave
- Enceladus: Voz entrecortada
- Erinome: Borrar
- Fenrir: Entusiasta
- Gacrux: Adulta
- Iapetus: Voz clara
- Kore: Firme
- Laomedeia: Alegre
- Leda: Juvenil
- Orus: Firme
- Puck: Alegre
- Pulcherrima: Voz decidida
- Rasalgethi: Informativo
- Sadachbia: Animada
- Sadaltager: Voz experta
- Schedar: Par
- Sulafat: Cálida
- Umbriel: Despreocupada
- Vindemiatrix: Voz amable
- Zephyr: Alegre
- Zubenelgenubi: Casual
Biblioteca de voces extendida
Además de las 30 voces precompiladas, la biblioteca de voces extendida proporciona más de
2,000 voces predeterminadas seleccionadas en varios idiomas, acentos regionales, personajes
y casos de uso, como audiolibros, agentes conversacionales y noticias.
Para usar una voz de la biblioteca, pasa su ID en speechConfig.voiceConfig.voice, de la misma manera que pasas un nombre de voz precompilado.
Para explorar la biblioteca, llama al método list de la API de Voices (ListVoices). Se
devolverán las voces personalizadas almacenadas en tu proyecto, seguidas de las voces precompiladas y
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:prebuiltpara las voces prediseñadas y de la biblioteca,promptedpara las voces diseñadas oreplicatedpara 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 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 de 16 bits little-endian con firma (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 la 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 un resultado 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 el ejemplo 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 entradas solo de texto y devuelven salidas solo de audio.
- Las solicitudes de varios interlocutores requieren exactamente dos interlocutores. Para combinar voces diseñadas
(
voice_...) o replicadas (voice_...ovoicekey_...) 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 un resultadoAUDIO_L16para cada turno o quita el encabezado WAV de cada clip antes de concatenarlos. - Los modelos están disponibles en las ubicaciones
global,usyeu. - Las voces personalizadas que pertenecen al usuario (voces creadas con diseño de voz o replicación de voz) 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 los resultados en MP3 ni Ogg Opus.
¿Qué sigue?
- Obtén información para dirigir el estilo, el ritmo y los sonidos vocales en la guía de instrucciones.
- Crea voces personalizadas a partir de una descripción de texto con Diseño de voz (versión preliminar).
- Replica la voz de un interlocutor con la replicación de voz (versión preliminar).
- Revisa las especificaciones de los modelos en las páginas de Gemini 3.8 Flash TTS y Gemini 3.8 Flash-Lite TTS.