L'API Gemini può trasformare l'input di testo in audio con una o più voci utilizzando le funzionalità di sintesi vocale (TTS) native. La generazione di sintesi vocale (TTS) è controllabile, il che significa che puoi utilizzare il linguaggio naturale per strutturare le interazioni e guidare lo stile, l'accento, il ritmo e il tono dell'audio.
La funzionalità TTS è diversa dalla sintesi vocale fornita tramite l'API Live, progettata per audio interattivi e non strutturati, nonché per input e output multimodali. Mentre l'API Live eccelle in contesti conversazionali dinamici, la sintesi vocale tramite l'API Gemini è pensata per scenari che richiedono una recitazione esatta del testo con un controllo preciso su stile e suono, come la generazione di podcast o audiolibri.
Questa guida mostra come generare audio con un solo relatore e con più relatori dal testo.
Prima di iniziare
Assicurati di utilizzare una variante del modello Gemini 2.5 con funzionalità di sintesi vocale (TTS) native, come elencato nella sezione Modelli supportati. Per risultati ottimali, valuta quale modello si adatta meglio al tuo caso d'uso specifico.
Prima di iniziare a creare, ti consigliamo di testare i modelli TTS Gemini 2.5 in AI Studio.
Sintesi vocale con un solo interlocutore
Per convertire il testo in audio con un solo oratore, imposta la modalità di risposta su "audio" e passa un oggetto SpeechConfig con VoiceConfig impostato.
Dovrai scegliere un nome per la voce tra le voci di output predefinite.
Questo esempio salva l'audio di output del modello in un file wave:
Python
from google import genai
from google.genai import types
import wave
# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
with wave.open(filename, "wb") as wf:
wf.setnchannels(channels)
wf.setsampwidth(sample_width)
wf.setframerate(rate)
wf.writeframes(pcm)
client = genai.Client()
response = client.models.generate_content(
model="gemini-2.5-flash-preview-tts",
contents="Say cheerfully: Have a wonderful day!",
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Kore',
)
)
),
)
)
data = response.candidates[0].content.parts[0].inline_data.data
file_name='out.wav'
wave_file(file_name, data) # Saves the file to current directory
JavaScript
import {GoogleGenAI} from '@google/genai';
import wav from 'wav';
async function saveWaveFile(
filename,
pcmData,
channels = 1,
rate = 24000,
sampleWidth = 2,
) {
return new Promise((resolve, reject) => {
const writer = new wav.FileWriter(filename, {
channels,
sampleRate: rate,
bitDepth: sampleWidth * 8,
});
writer.on('finish', resolve);
writer.on('error', reject);
writer.write(pcmData);
writer.end();
});
}
async function main() {
const ai = new GoogleGenAI({});
const response = await ai.models.generateContent({
model: "gemini-2.5-flash-preview-tts",
contents: [{ parts: [{ text: 'Say cheerfully: Have a wonderful day!' }] }],
config: {
responseModalities: ['AUDIO'],
speechConfig: {
voiceConfig: {
prebuiltVoiceConfig: { voiceName: 'Kore' },
},
},
},
});
const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
const audioBuffer = Buffer.from(data, 'base64');
const fileName = 'out.wav';
await saveWaveFile(fileName, audioBuffer);
}
await main();
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-X POST \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts":[{
"text": "Say cheerfully: Have a wonderful day!"
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"voiceConfig": {
"prebuiltVoiceConfig": {
"voiceName": "Kore"
}
}
}
},
"model": "gemini-2.5-flash-preview-tts",
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
base64 --decode >out.pcm
# You may need to install ffmpeg.
ffmpeg -f s16le -ar 24000 -ac 1 -i out.pcm out.wav
Sintesi vocale multilingue
Per l'audio multi-speaker, è necessario un oggetto MultiSpeakerVoiceConfig con
ogni speaker (fino a 2) configurato come SpeakerVoiceConfig.
Devi definire ogni speaker con gli stessi nomi utilizzati nel
prompt:
Python
from google import genai
from google.genai import types
import wave
# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
with wave.open(filename, "wb") as wf:
wf.setnchannels(channels)
wf.setsampwidth(sample_width)
wf.setframerate(rate)
wf.writeframes(pcm)
client = genai.Client()
prompt = """TTS the following conversation between Joe and Jane:
Joe: How's it going today Jane?
Jane: Not too bad, how about you?"""
response = client.models.generate_content(
model="gemini-2.5-flash-preview-tts",
contents=prompt,
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
speaker_voice_configs=[
types.SpeakerVoiceConfig(
speaker='Joe',
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Kore',
)
)
),
types.SpeakerVoiceConfig(
speaker='Jane',
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Puck',
)
)
),
]
)
)
)
)
data = response.candidates[0].content.parts[0].inline_data.data
file_name='out.wav'
wave_file(file_name, data) # Saves the file to current directory
JavaScript
import {GoogleGenAI} from '@google/genai';
import wav from 'wav';
async function saveWaveFile(
filename,
pcmData,
channels = 1,
rate = 24000,
sampleWidth = 2,
) {
return new Promise((resolve, reject) => {
const writer = new wav.FileWriter(filename, {
channels,
sampleRate: rate,
bitDepth: sampleWidth * 8,
});
writer.on('finish', resolve);
writer.on('error', reject);
writer.write(pcmData);
writer.end();
});
}
async function main() {
const ai = new GoogleGenAI({});
const prompt = `TTS the following conversation between Joe and Jane:
Joe: How's it going today Jane?
Jane: Not too bad, how about you?`;
const response = await ai.models.generateContent({
model: "gemini-2.5-flash-preview-tts",
contents: [{ parts: [{ text: prompt }] }],
config: {
responseModalities: ['AUDIO'],
speechConfig: {
multiSpeakerVoiceConfig: {
speakerVoiceConfigs: [
{
speaker: 'Joe',
voiceConfig: {
prebuiltVoiceConfig: { voiceName: 'Kore' }
}
},
{
speaker: 'Jane',
voiceConfig: {
prebuiltVoiceConfig: { voiceName: 'Puck' }
}
}
]
}
}
}
});
const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
const audioBuffer = Buffer.from(data, 'base64');
const fileName = 'out.wav';
await saveWaveFile(fileName, audioBuffer);
}
await main();
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-X POST \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts":[{
"text": "TTS the following conversation between Joe and Jane:
Joe: Hows it going today Jane?
Jane: Not too bad, how about you?"
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {
"multiSpeakerVoiceConfig": {
"speakerVoiceConfigs": [{
"speaker": "Joe",
"voiceConfig": {
"prebuiltVoiceConfig": {
"voiceName": "Kore"
}
}
}, {
"speaker": "Jane",
"voiceConfig": {
"prebuiltVoiceConfig": {
"voiceName": "Puck"
}
}
}]
}
}
},
"model": "gemini-2.5-flash-preview-tts",
}' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
base64 --decode > out.pcm
# You may need to install ffmpeg.
ffmpeg -f s16le -ar 24000 -ac 1 -i out.pcm out.wav
Controllare lo stile del discorso con i prompt
Puoi controllare stile, tono, accento e ritmo utilizzando prompt in linguaggio naturale sia per la sintesi vocale di una singola persona sia per quella di più persone. Ad esempio, in un prompt con un solo oratore, puoi dire:
Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"
In un prompt con più speaker, fornisci al modello il nome di ciascuno e la trascrizione corrispondente. Puoi anche fornire indicazioni per ogni oratore singolarmente:
Make Speaker1 sound tired and bored, and Speaker2 sound excited and happy:
Speaker1: So... what's on the agenda today?
Speaker2: You're never going to guess!
Prova a utilizzare un'opzione vocale che corrisponda allo stile o all'emozione che vuoi trasmettere, per enfatizzarla ancora di più. Nel prompt precedente, ad esempio, il tono affannoso di Encelado potrebbe enfatizzare "stanco" e "annoiato", mentre il tono allegro di Puck potrebbe completare "entusiasta" e "felice".
Generazione di un prompt per la conversione in audio in corso…
I modelli TTS generano solo audio, ma puoi utilizzare altri modelli per generare prima una trascrizione, quindi trasmetterla al modello TTS per la lettura ad alta voce.
Python
from google import genai
from google.genai import types
client = genai.Client()
transcript = client.models.generate_content(
model="gemini-2.0-flash",
contents="""Generate a short transcript around 100 words that reads
like it was clipped from a podcast by excited herpetologists.
The hosts names are Dr. Anya and Liam.""").text
response = client.models.generate_content(
model="gemini-2.5-flash-preview-tts",
contents=transcript,
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
speaker_voice_configs=[
types.SpeakerVoiceConfig(
speaker='Dr. Anya',
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Kore',
)
)
),
types.SpeakerVoiceConfig(
speaker='Liam',
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Puck',
)
)
),
]
)
)
)
)
# ...Code to stream or save the output
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
const transcript = await ai.models.generateContent({
model: "gemini-2.0-flash",
contents: "Generate a short transcript around 100 words that reads like it was clipped from a podcast by excited herpetologists. The hosts names are Dr. Anya and Liam.",
})
const response = await ai.models.generateContent({
model: "gemini-2.5-flash-preview-tts",
contents: transcript,
config: {
responseModalities: ['AUDIO'],
speechConfig: {
multiSpeakerVoiceConfig: {
speakerVoiceConfigs: [
{
speaker: "Dr. Anya",
voiceConfig: {
prebuiltVoiceConfig: {voiceName: "Kore"},
}
},
{
speaker: "Liam",
voiceConfig: {
prebuiltVoiceConfig: {voiceName: "Puck"},
}
}
]
}
}
}
});
}
// ..JavaScript code for exporting .wav file for output audio
await main();
Opzioni vocali
I modelli TTS supportano le seguenti 30 opzioni vocali nel campo voice_name:
| Zephyr - Luminoso | Puck: Upbeat | Caronte: informativa |
| Kore -- Azienda | Fenrir: eccitabile | Leda -- Giovane |
| Orus -- Azienda | Aoede - Breezy | Callirrhoe: informale |
| Autonoe: Luminoso | Enceladus - Breathy | Iapetus -- Cancella |
| Umbriel: tranquillo | Algieba - Smooth | Despina -- Smooth |
| Erinome -- Sereno | Algenib - Gravelly | Rasalgethi -- Priorità informativa |
| Laomedeia -- Upbeat | Achernar - Soft | Alnilam -- Firm |
| Schedar -- Even | Gacrux - Per adulti | Pulcherrima -- Diretta |
| Achird: amichevole | Zubenelgenubi - Casual | Vindemiatrix - Delicato |
| Sadachbia - Vivace | Sadaltager -- Knowledgeable | Sulafat - Calda |
Puoi ascoltare tutte le opzioni vocali in AI Studio.
Lingue supportate
I modelli di sintesi vocale rilevano automaticamente la lingua di input. Supportano le seguenti 24 lingue:
| Lingua | Codice BCP-47 | Lingua | Codice BCP-47 |
|---|---|---|---|
| Arabo (egiziano) | ar-EG |
Tedesco (Germania) | de-DE |
| Inglese (USA) | en-US |
Spagnolo (Stati Uniti) | es-US |
| Francese (Francia) | fr-FR |
Hindi (India) | hi-IN |
| Indonesiano (Indonesia) | id-ID |
Italiano (Italia) | it-IT |
| Giapponese (Giappone) | ja-JP |
Coreano (Corea) | ko-KR |
| Portoghese (Brasile) | pt-BR |
Russo (Russia) | ru-RU |
| Olandese (Paesi Bassi) | nl-NL |
Polacco (Polonia) | pl-PL |
| Thailandese (Thailandia) | th-TH |
Turco (Turchia) | tr-TR |
| Vietnamita (Vietnam) | vi-VN |
Rumeno (Romania) | ro-RO |
| Ucraino (Ucraina) | uk-UA |
Bengalese (Bangladesh) | bn-BD |
| Inglese (India) | Bundle en-IN e hi-IN |
Marathi (India) | mr-IN |
| Tamil (India) | ta-IN |
Telugu (India) | te-IN |
Modelli supportati
| Modello | Unico relatore | Multispeaker |
|---|---|---|
| Gemini 2.5 Flash Preview TTS | ✔️ | ✔️ |
| Gemini 2.5 Pro Preview TTS | ✔️ | ✔️ |
Limitazioni
- I modelli TTS possono ricevere solo input di testo e generare output audio.
- Una sessione TTS ha un limite di 32.000 token per la finestra contestuale.
- Consulta la sezione Lingue per informazioni sulle lingue supportate.
Guida ai prompt
Il modello Gemini Native Audio Generation Text-to-Speech (TTS) si differenzia dai modelli TTS tradizionali perché utilizza un modello linguistico di grandi dimensioni che sa non solo cosa dire, ma anche come dirlo.
Per sbloccare questa funzionalità, gli utenti possono immaginarsi di essere registi che preparano la scena per la performance di un doppiatore virtuale. Per creare un prompt, ti consigliamo di considerare i seguenti componenti: un profilo audio che definisce l'identità e l'archetipo principali del personaggio, una descrizione della scena che stabilisce l'ambiente fisico e l'atmosfera emotiva e le note del regista che offrono indicazioni più precise sullo stile, sull'accento e sul controllo del ritmo.
Fornendo istruzioni dettagliate, come un accento regionale preciso, caratteristiche paralinguistiche specifiche (ad es. respiro) o ritmo, gli utenti possono sfruttare la consapevolezza del contesto del modello per generare prestazioni audio altamente dinamiche, naturali ed espressive. Per prestazioni ottimali, consigliamo che i prompt della trascrizione e della regia siano allineati, in modo che "chi lo dice" corrisponda a "cosa viene detto" e "come viene detto".
Lo scopo di questa guida è fornire indicazioni fondamentali e stimolare idee per lo sviluppo di esperienze audio utilizzando la generazione audio Gemini TTS. Non vediamo l'ora di vedere le tue creazioni.
Struttura del prompt
Un prompt efficace include idealmente i seguenti elementi che si combinano per creare una performance eccezionale:
- Profilo audio: stabilisce una persona per la voce, definendo un'identità, un archetipo e qualsiasi altra caratteristica come età, background ecc.
- Scena: imposta lo scenario. Descrive sia l'ambiente fisico sia l'atmosfera.
- Note del regista: indicazioni sul rendimento in cui puoi specificare le istruzioni importanti che i tuoi talenti virtuali devono prendere in considerazione. Alcuni esempi sono lo stile, la respirazione, il ritmo, l'articolazione e l'accento.
- Contesto di esempio: fornisce al modello un punto di partenza contestuale, in modo che l'attore virtuale entri in scena in modo naturale.
- Trascrizione: il testo che il modello pronuncerà. Per ottenere prestazioni ottimali, ricorda che l'argomento e lo stile di scrittura della trascrizione devono essere correlati alle indicazioni che stai dando.
Prompt completo di esempio:
# AUDIO PROFILE: Jaz R.
## "The Morning Hype"
## THE SCENE: The London Studio
It is 10:00 PM in a glass-walled studio overlooking the moonlit London skyline,
but inside, it is blindingly bright. The red "ON AIR" tally light is blazing.
Jaz is standing up, not sitting, bouncing on the balls of their heels to the
rhythm of a thumping backing track. Their hands fly across the faders on a
massive mixing desk. It is a chaotic, caffeine-fueled cockpit designed to wake
up an entire nation.
### DIRECTOR'S NOTES
Style:
* The "Vocal Smile": You must hear the grin in the audio. The soft palate is
always raised to keep the tone bright, sunny, and explicitly inviting.
* Dynamics: High projection without shouting. Punchy consonants and elongated
vowels on excitement words (e.g., "Beauuutiful morning").
Pace: Speaks at an energetic pace, keeping up with the fast music. Speaks
with A "bouncing" cadence. High-speed delivery with fluid transitions — no dead
air, no gaps.
Accent: Jaz is from Brixton, London
### SAMPLE CONTEXT
Jaz is the industry standard for Top 40 radio, high-octane event promos, or any
script that requires a charismatic Estuary accent and 11/10 infectious energy.
#### TRANSCRIPT
Yes, massive vibes in the studio! You are locked in and it is absolutely
popping off in London right now. If you're stuck on the tube, or just sat
there pretending to work... stop it. Seriously, I see you. Turn this up!
We've got the project roadmap landing in three, two... let's go!
Strategie di prompting dettagliate
Analizziamo ogni elemento del prompt.
Profilo audio
Descrivi brevemente la personalità del personaggio.
- Nome. Assegnare un nome al personaggio aiuta a dare un contesto al modello e a migliorare la performance. Fai riferimento al personaggio per nome quando imposti la scena e il contesto.
- Ruolo. Identità e archetipo principali del personaggio che si sta esibendo nella scena. Ad esempio: DJ radiofonico, podcaster, giornalista, ecc.
Esempi:
# AUDIO PROFILE: Jaz R.
## "The Morning Hype"
# AUDIO PROFILE: Monica A.
## "The Beauty Influencer"
Scena
Imposta il contesto della scena, inclusi posizione, atmosfera e dettagli ambientali che stabiliscono il tono e l'atmosfera. Descrivi cosa sta succedendo intorno al personaggio e come lo influenza. La scena fornisce il contesto ambientale per l'intera interazione e guida la recitazione in modo sottile e organico.
Esempi:
## THE SCENE: The London Studio
It is 10:00 PM in a glass-walled studio overlooking the moonlit London skyline,
but inside, it is blindingly bright. The red "ON AIR" tally light is blazing.
Jaz is standing up, not sitting, bouncing on the balls of their heels to the
rhythm of a thumping backing track. Their hands fly across the faders on a
massive mixing desk. It is a chaotic, caffeine-fueled cockpit designed to
wake up an entire nation.
## THE SCENE: Homegrown Studio
A meticulously sound-treated bedroom in a suburban home. The space is
deadened by plush velvet curtains and a heavy rug, but there is a
distinct "proximity effect."
Note del regista
Questa sezione fondamentale include indicazioni specifiche sul rendimento. Puoi saltare tutti gli altri elementi, ma ti consigliamo di includere questo.
Definisci solo ciò che è importante per il rendimento, facendo attenzione a non specificare eccessivamente. Regole troppo rigide limiteranno la creatività dei modelli e potrebbero comportare un rendimento peggiore. Bilancia la descrizione del ruolo e della scena con le regole specifiche per la performance.
Le indicazioni più comuni sono Stile, Ritmo e Accento, ma il modello non è limitato a queste e non le richiede. Non esitare a includere istruzioni personalizzate per coprire eventuali dettagli aggiuntivi importanti per il rendimento e fornisci tutti i dettagli necessari.
Ad esempio:
### DIRECTOR'S NOTES
Style: Enthusiastic and Sassy GenZ beauty YouTuber
Pacing: Speaks at an energetic pace, keeping up with the extremely fast, rapid
delivery influencers use in short form videos.
Accent: Southern california valley girl from Laguna Beach |
Stile:
Imposta il tono e lo stile del discorso generato. Includi elementi come allegro, energico, rilassato, annoiato e così via per guidare la performance. Fornisci una descrizione dettagliata e fornisci tutti i dettagli necessari: "Entusiasmo contagioso. L'ascoltatore dovrebbe sentirsi parte di un evento comunitario enorme ed entusiasmante" funziona meglio di un semplice "energetico ed entusiasta".
Puoi anche provare termini popolari nel settore del voiceover, come "sorriso vocale". Puoi sovrapporre tutte le caratteristiche di stile che vuoi.
Esempi:
Simple Emotion
DIRECTORS NOTES
...
Style: Frustrated and angry developer who can't get the build to run.
...
Maggiore profondità
DIRECTORS NOTES
...
Style: Sassy GenZ beauty YouTuber, who mostly creates content for YouTube Shorts.
...
Complesso
DIRECTORS NOTES
Style:
* The "Vocal Smile": You must hear the grin in the audio. The soft palate is
always raised to keep the tone bright, sunny, and explicitly inviting.
*Dynamics: High projection without shouting. Punchy consonants and
elongated vowels on excitement words (e.g., "Beauuutiful morning").
Accento:
Descrivi l'accento che preferisci. Più specifico è il prompt, migliori saranno i risultati. Ad esempio, utilizza "Accento inglese britannico come si sente a Croydon, Inghilterra" anziché "Accento britannico".
Esempi:
### DIRECTORS NOTES
...
Accent: Southern california valley girl from Laguna Beach
...
### DIRECTORS NOTES
...
Accent: Jaz is a from Brixton, London
...
Pacing:
Il ritmo generale e la sua variazione nel corso del brano.
Esempi:
Semplice
### DIRECTORS NOTES
...
Pacing: Speak as fast as possible
...
Più profondità
### DIRECTORS NOTES
...
Pacing: Speaks at a faster, energetic pace, keeping up with fast paced music.
...
Complesso
### DIRECTORS NOTES
...
Pacing: The "Drift": The tempo is incredibly slow and liquid. Words bleed into each other. There is zero urgency.
...
Prova
Prova alcuni di questi esempi su AI Studio, gioca con la nostra app TTS e lascia che Gemini ti metta nei panni del regista. Tieni a mente questi suggerimenti per ottenere ottime performance vocali:
- Ricorda di mantenere la coerenza dell'intero prompt: il copione e la regia vanno di pari passo per creare una performance eccezionale.
- Non sentirti in dovere di descrivere tutto. A volte, lasciare al modello lo spazio per colmare le lacune aiuta a rendere il testo più naturale. (proprio come un attore di talento)
- Se ti senti bloccato, chiedi a Gemini di aiutarti a creare il copione o la performance.
Passaggi successivi
- Prova il cookbook per la generazione audio.
- L'API Live di Gemini offre opzioni di generazione audio interattive che puoi alternare ad altre modalità.
- Per lavorare con gli input audio, consulta la guida Comprensione dell'audio.