I modelli di sintesi vocale (TTS) di Gemini convertono il testo in audio con uno o più parlanti. Puoi controllare lo stile, l'accento, il ritmo e il tono dell'audio con i metadati dei turni strutturati (speech_metadata) e i tag vocali incorporati.
Questa pagina mostra come generare il parlato con i seguenti modelli utilizzando i metodi generateContent e streamGenerateContent dell'API Gemini Enterprise:
- Gemini 3.8 Flash TTS
(
gemini-3.8-flash-tts) - Gemini 3.8 Flash-Lite TTS
(
gemini-3.8-flash-lite-tts)
I modelli TTS sono personalizzati per la recitazione esatta del testo con un controllo granulare su stile e suono, come narrazione, audiolibri e risposte degli agenti vocali. Per conversazioni interattive in tempo reale con input e output audio, utilizza invece l'API Live.
Se utilizzi un modello Gemini TTS precedente, ad esempio gemini-3.1-flash-tts-preview, consulta la guida alla migrazione.
Per provare la generazione di voce di una singola persona senza scrivere codice, apri Gemini 3.8 Flash TTS in Agent Studio:
Prova Gemini 3.8 TTS in Agent Studio
Modelli supportati
| Modello | Unico relatore | Più relatori | Streaming | Voice design (anteprima) | Replica vocale (anteprima) |
|---|---|---|---|---|---|
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) |
Gli esempi e le funzionalità di questa pagina si applicano ai modelli Gemini 3.8 TTS. Per i modelli precedenti, consulta Gemini-TTS nella documentazione diGoogle Cloud Text-to-Speech.
Quando utilizzare un modello o l'altro
Entrambi i modelli Gemini 3.8 TTS condividono lo stesso schema di richiesta e lo stesso formato di prompt, quindi puoi passare da uno all'altro modificando l'ID modello:
- Utilizza Gemini 3.8 Flash TTS (
gemini-3.8-flash-tts) quando la fedeltà acustica, la recitazione sfumata e il controllo espressivo sono la priorità assoluta. È adatto per lavori creativi di livello professionale, dialoghi complessi con più interlocutori, tag di vocal burst frequenti, pronunce difficili, dialetti regionali o di minoranze e narrazioni di lunga durata che richiedono una voce e un tono ambientale stabili. - Utilizza Gemini 3.8 Flash-Lite TTS (
gemini-3.8-flash-lite-tts) per workload di produzione rapidi ed economici. È la sostituzione consigliata pergemini-3.1-flash-tts-previewed è adatta per la produzione in batch di volumi elevati, le cascate di agenti vocali conversazionali, le funzionalità di lettura ad alta voce, la replica vocale e il parlato quotidiano con un singolo speaker nelle principali lingue.
Prima di iniziare
- Configura un progetto e abilita l'API Gemini Enterprise.
- Configura le Credenziali predefinite dell'applicazione per il tuo ambiente di sviluppo.
Per utilizzare gli esempi di Python, installa la versione 2.33.0 o successive dell'SDK Google Gen AI:
pip install --upgrade "google-genai>=2.33.0"
Località ed endpoint regionali disponibili
I modelli Gemini 3.8 TTS sono disponibili nella località global e nelle località multi-regione us e eu:
| Località | Parametro di località | Endpoint |
|---|---|---|
| Globale | global |
https://aiplatform.googleapis.com |
| Stati Uniti (multiregionale) | us |
https://aiplatform.us.rep.googleapis.com |
| Unione Europea (multiregionale) | eu |
https://aiplatform.eu.rep.googleapis.com |
Per indirizzare le richieste a un endpoint regionale, imposta location="us" (o location="eu") durante l'inizializzazione del client nell'SDK oppure invia le richieste al nome host multiregionale corrispondente (https://aiplatform.us.rep.googleapis.com o https://aiplatform.eu.rep.googleapis.com) con il percorso della località corrispondente nell'URL REST:
Python
from google import genai
# Set location to 'us' or 'eu' for multi-region routing (or 'global' for global)
client = genai.Client(
enterprise=True,
project="PROJECT_ID",
location="us",
)
response = client.models.generate_content(
model="gemini-3.8-flash-tts",
contents=[{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speech_metadata": {"style": "cheerful and friendly"},
}],
}],
config={
"response_modalities": ["AUDIO"],
"speech_config": {"voice_config": {"voice": "Kore"}},
},
)
with open("out.wav", "wb") as f:
f.write(response.candidates[0].content.parts[0].inline_data.data)
REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-tts:generateContent \
-d '{
"contents": [{
"role": "user",
"parts": [{
"text": "Have a wonderful day!",
"speechMetadata": {"style": "cheerful and friendly"}
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"voiceConfig": {"voice": "Kore"}
}
}
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.wav
TTS con un solo speaker
Per convertire il testo in audio con un singolo interlocutore, passa la trascrizione letterale in parts[].text, aggiungi uno stile facoltativo a livello di turno in parts[].speech_metadata e imposta la voce in speechConfig.voiceConfig.voice. Il campo voice accetta il nome di una voce predefinita, l'ID di una voce della libreria di voci estesa o l'ID (voice_...) di una voce progettata o replicata (o una chiave voicekey_... stateless facoltativa).
Per impostazione predefinita, le richieste unarie restituiscono un file WAV completo (PCM a 16 bit, 24 kHz, mono), in modo da poter scrivere i byte audio direttamente in un file .wav. Le richieste di streaming restituiscono invece blocchi PCM non elaborati. Per informazioni dettagliate e altre codifiche, consulta Formati di output audio.
Console
- Apri Gemini 3.8 Flash TTS o Gemini 3.8 Flash-Lite TTS in Agent Studio.
- Nel riquadro delle impostazioni, scegli una voce predefinita, una lingua (o mantieni Rilevamento automatico) e una descrizione facoltativa dello stile (ad esempio,
cheerful and friendly). - Inserisci la trascrizione da pronunciare nel campo del prompt e inviala per generare, riprodurre o scaricare l'audio WAV. Fai clic su Ottieni codice per esportare la richiesta come 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 in streaming con un singolo interlocutore
Per ricevere l'audio mentre il modello lo sta ancora sintetizzando, utilizza il metodo streamGenerateContent. Le risposte in streaming restituiscono blocchi PCM non elaborati a 16 bit senza intestazione (24 kHz, mono), in modo da poter passare ogni blocco a un player, a un socket o a un'altra pipeline audio non appena arriva. Nell'esempio Python seguente, la funzione emit_audio rappresenta la destinazione.
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
Il file streamed.pcm contiene audio PCM non elaborato a 16 bit a 24 kHz, mono.
TTS con più speaker
Per il dialogo tra due interlocutori, configura entrambi gli interlocutori in speechConfig.multiSpeakerVoiceConfig.speakerVoiceConfigs. Quindi, passa ogni turno come part separato, imposta speech_metadata.speaker su ogni turno su uno dei nomi degli speaker configurati e aggiungi un style facoltativo a livello di turno.
Le richieste con più speaker richiedono esattamente due speaker.
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 in streaming con più speaker
Le richieste con più speaker supportano anche lo streaming. Utilizza la stessa richiesta di TTS con più speaker con il metodo 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
Il file dialogue_streamed.pcm contiene audio PCM non elaborato a 16 bit a 24 kHz,
mono.
Controlla lo stile del parlato con metadati e tag
I modelli Gemini 3.8 TTS trattano il campo text come una trascrizione letterale.
Le istruzioni scritte nel testo, come "Say cheerfully: Hello!" o
"Speaker 1: Hello!", potrebbero essere lette ad alta voce. Per controllare la consegna, suddividi le istruzioni in base all'ambito:
- Resa sostenuta a livello di turno (
speech_metadata.style): inserisci l'emozione, lo stile di resa, la prosodia, il ritmo e il volume che si applicano a un intero turno inspeech_metadata.style. Ad esempio,"style": "whispered urgently","style": "out of breath"o"style": "warm and enthusiastic". - Eventi puntuali (tag incorporati): inserisci i suoni vocali non verbali momentanei e le pause all'interno della trascrizione tra parentesi angolari. Ad esempio,
"Wait... <short pause> did you hear that? <sigh>"o"Excuse me <cough> as I was saying...".
Per ulteriori indicazioni, consulta la guida ai prompt.
Opzioni vocali
I modelli Gemini 3.8 TTS supportano quattro modi per selezionare o creare voci:
- Voci predefinite: 30 voci selezionate.
- Libreria di voci estesa: oltre 2000 voci preimpostate curate in diverse lingue, accenti regionali e personalità dei personaggi.
- Voice design (anteprima):
crea una voce personalizzata da una descrizione in linguaggio naturale con il metodo
createdell'API Voices (client.voices.create()nell'SDK Google Gen AI oPOST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices). ImpostatypesuVOICE_TYPE_PROMPTEDestoresutrue. La risposta restituisce un IDvoice_...memorizzato e un campione della voce. - Replica vocale (anteprima):
replica la voce di un oratore dall'audio di riferimento e di consenso con lo stesso metodo
create. ImpostatypesuVOICE_TYPE_REPLICATED. Constore: true, la risposta restituisce un IDvoice_...archiviato. Constore: false, restituisce una chiavevoicekey_...stateless.
Limiti e TTL della voce personalizzata
| Tipo di voce | Modalità di archiviazione | Gestione | Scadenza |
|---|---|---|---|
Voci memorizzate (voice_..., progettate o replicate) |
store: true |
Metodi list, get e delete dell'API Voices |
1 anno dopo l'ultimo utilizzo |
Chiavi di replica vocale (voicekey_...) |
store: false |
Gestito dalla tua applicazione. Google non conserva la chiave. | 7 giorni dopo la creazione |
La generazione di parlato con una voce memorizzata riavvia il periodo di conservazione di un anno,
quindi una voce che utilizzi regolarmente non scade. Le richieste di creazione della voce sono soggette a una quota per progetto e al minuto. Se lo superi, il metodo create restituisce un errore RESOURCE_EXHAUSTED. Per saperne di più, consulta Quote e limiti di sistema.
Archiviazione e conservazione dei dati
Google memorizza gli input che fornisci quando crei una voce memorizzata, insieme agli artefatti vocali derivati, in associazione al progettoGoogle Cloud che ha creato la voce.
Quando crei una voce replicata dalla registrazione di un oratore, vengono memorizzati i seguenti dati:
- Audio di riferimento: il campione dello speaker la cui voce viene replicata.
- Audio di consenso: l'oratore che legge la dichiarazione di consenso richiesta.
Quando crei una voce progettata utilizzando una descrizione testuale di una voce in un prompt, vengono memorizzati i seguenti dati:
- Il prompt testuale che hai scritto per descrivere la voce.
- L'audio della voce generato dal prompt, che il modello utilizza come riferimento per la voce.
Una voce progettata non ha un audio di consenso, perché viene generata da una descrizione anziché dalla registrazione di una persona.
Gli input vocali vengono memorizzati in modo che la tua voce continui a funzionare con gli aggiornamenti del modello. Gli artefatti vocali vengono rigenerati dagli input archiviati quando il modello sottostante viene aggiornato. Se non vengono trovati input archiviati per una voce, i relativi artefatti non possono essere rigenerati e la voce smette di funzionare dopo un aggiornamento del modello. Dovrai quindi creare di nuovo la voce.
Gli input archiviati vengono utilizzati solo per rigenerare la voce quando i modelli vengono aggiornati. Sono criptati at-rest e isolati nel progetto che ha creato la voce.
Periodo di conservazione
Le voci e tutti i dati archiviati associati vengono conservati per un massimo di un anno (365 giorni) dall'ultima volta che hai utilizzato la voce per sintetizzare il parlato. Il periodo inizia quando crei la voce e viene reimpostato ogni volta che invii una richiesta di sintesi che utilizza la voce. Se una voce non viene utilizzata per 365 giorni, la voce, gli input memorizzati e gli artefatti derivati vengono eliminati.
Eliminazione da parte del cliente
Puoi eliminare una voce in qualsiasi momento con il metodo delete dell'API Voices.
L'eliminazione di una voce comporta l'eliminazione degli input archiviati e degli artefatti derivati. L'eliminazione del progetto Google Cloud proprietario di una voce comporta anche l'eliminazione della voce, seguendo la procedura standard di eliminazione del progetto.
Voci predefinite
Il seguente elenco mostra il nome di ogni voce predefinita e la relativa caratteristica:
- Achernar: morbido
- Achird: amichevole
- Algenib: rauca
- Algieba: Smooth
- Alnilam: decisa
- Aoede: ariosa
- Autonoe: brillante
- Callirrhoe: informale
- Charon: informativa
- Despina: fluida
- Enceladus: sussurrante
- Erinome: Clear
- Fenrir: emotiva
- Gacrux: matura
- Iapetus: chiara
- Kore: decisa
- Laomedeia: allegra
- Leda: giovanile
- Orus: azienda
- Puck: Upbeat
- Pulcherrima: diretta
- Rasalgethi: informativa
- Sadachbia: vivace
- Sadaltager: esperta
- Schedar: Uniforme
- Sulafat: calda
- Umbriel: rilassata
- Vindemiatrix: delicata
- Zephyr: brillante
- Zubenelgenubi: disinvolta
Raccolta di voci estesa
Oltre alle 30 voci predefinite, la libreria di voci estesa offre più di 2000 voci preimpostate selezionate in varie lingue, accenti regionali, personaggi e casi d'uso come audiolibri, agenti conversazionali e notizie.
Per utilizzare una voce della libreria, passa il suo ID in speechConfig.voiceConfig.voice, nello stesso modo in cui passi un nome di voce predefinita.
Per sfogliare la libreria, chiama il metodo list dell'API Voices (ListVoices). Restituisce le voci personalizzate archiviate nel tuo progetto, seguite dalle voci predefinite e della libreria di voci estesa. Ogni voce della libreria include il proprio id e i metadati come language_code, accent, gender, pitch, persona e description. Per restringere i risultati, utilizza i seguenti filtri:
type: l'origine della voce:prebuiltper le voci predefinite e della libreria,promptedper le voci progettate oreplicatedper le voci replicate. Se passi più di un valore, il metodo restituisce le voci che corrispondono a uno qualsiasi di questi valori.search: testo da confrontare, senza distinzione tra maiuscole e minuscole, con il nome visualizzato e la descrizione di ogni voce.
L'esempio seguente cerca nella libreria le voci del narratore:
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"
Il metodo list restituisce fino a 50 voci per pagina. Per visualizzare la pagina successiva, passa il valore next_page_token della risposta come parametro page_token.
Formati di uscita audio
La codifica audio predefinita dipende dal metodo:
- Le richieste unarie (
generateContent) restituiscono un file WAV completo (audio/wav) con un'intestazione RIFF: PCM a 16 bit, 24 kHz, mono. - Le richieste di streaming (
streamGenerateContent) restituiscono blocchi PCM non elaborati a 16 bit con segno, little-endian e senza intestazione (audio/l16) a 24 kHz, mono.
Per richiedere una codifica diversa, imposta generationConfig.responseFormat su un formato audio. I modelli Gemini 3.8 TTS supportano i seguenti valori mimeType:
Valore mimeType |
Formato | Descrizione |
|---|---|---|
AUDIO_WAV (unary default) |
WAV (audio/wav) |
File WAV completo con un'intestazione RIFF (PCM a 16 bit, 24 kHz, mono). |
AUDIO_L16 (valore predefinito per lo streaming) |
PCM lineare (audio/l16) |
PCM raw a 16 bit signed, little endian, senza intestazione. Utilizzalo per lo streaming, le pipeline audio personalizzate o la concatenazione di clip multi-turn. |
AUDIO_MULAW |
μ-law (audio/mulaw) |
Audio compresso con legge μ G.711 (8 kHz, mono), di uso comune nella telefonia nordamericana e giapponese. |
AUDIO_ALAW |
A-law (audio/alaw) |
Audio compresso con legge A G.711 (8 kHz, mono), di uso comune nella telefonia europea e internazionale. |
I modelli ignorano il campo sampleRate. L'output PCM e WAV lineare è di 24 kHz, mentre l'output μ-law e A-law è di 8 kHz, indipendentemente dalla frequenza nella risposta mimeType. Se la pipeline richiede una frequenza di campionamento diversa, ricampiona l'output sul client.
L'esempio seguente richiede l'output μ-law per una pipeline di telefonia. L'SDK Google Gen AI per Python non espone responseFormat in GenerateContentConfig, quindi l'esempio Python lo passa nel corpo della richiesta 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
Lingue supportate
I modelli Gemini 3.8 TTS rilevano automaticamente la lingua di input. Gemini 3.8 Flash TTS supporta 130 lingue e Gemini 3.8 Flash-Lite TTS supporta 101 lingue:
Limitazioni
- I modelli TTS accettano input di solo testo e restituiscono output di solo audio.
- Le richieste con più speaker richiedono esattamente due speaker. Per combinare voci progettate (
voice_...) o replicate (voice_...ovoicekey_...) in un dialogo con più personaggi o per utilizzare più di due speaker, sintetizza il turno di ogni speaker singolarmente e concatena l'audio. Richiedi l'outputAUDIO_L16per ogni turno o rimuovi l'intestazione WAV da ogni clip prima di concatenare i clip. - I modelli sono disponibili nelle località
global,useeu. - Le voci personalizzate di proprietà dell'utente (voci create con la progettazione o la replica vocale) sono disponibili solo nella località
global. - Le istruzioni di sistema non sono supportate.
- Non puoi impostare la frequenza di campionamento di output. L'output MP3 e Ogg Opus non è supportato.
Passaggi successivi
- Scopri come gestire stile, ritmo e suoni vocali nella guida ai prompt.
- Crea voci personalizzate da una descrizione di testo con Voice Design (anteprima).
- Replica la voce di un oratore con la replica vocale (anteprima).
- Consulta le specifiche dei modelli nelle pagine dei modelli Gemini 3.8 Flash TTS e Gemini 3.8 Flash-Lite TTS.