La conception de voix vous permet de créer une toute nouvelle personnalité vocale persistante à partir d'une description en langage naturel à l'aide du point de terminaison Voices de l'API Gemini (POST /v1beta/voices). Au lieu d'être limité aux voix prédéfinies ou à l'enregistrement d'un audio de référence, vous pouvez décrire l'âge, le timbre de voix, l'accent et le ton de base d'un personnage, et recevoir un ID voice_... réutilisable enregistré dans votre projet.
Le moyen le plus rapide de concevoir, d'essayer et d'itérer des voix personnalisées est d'utiliser le studio interactif Voice Design dans Google AI Studio. Vous pouvez générer des personas personnalisés à partir de requêtes textuelles, les tester avec des exemples de scripts et copier l'ID voice_... obtenu directement dans le code de votre application.
Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) et Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) sont compatibles avec la conception de voix.
Créer une voix conçue
Utilisez le SDK Google GenAI (google-genai 2.25.0 ou version ultérieure / @google/genai 2.24.0 ou version ultérieure) ou l'API REST pour créer une voix personnalisée à partir d'une description textuelle. Pour les voix "prompted", voices.create (CreateVoice) et voices.get (GetVoice) renvoient un champ sample_audio en sortie uniquement (mime_type: "audio/wav", data encodé en base64) pour que vous puissiez écouter immédiatement la voix générée :
Python
import base64
from google import genai
client = genai.Client()
# 1. Design a custom voice persona from natural language
created_voice = client.voices.create(
store=True,
voice={
"model": "gemini-3.8-flash-tts",
"type": "prompted",
"display_name": "Warm British Astronomer",
"gender": "male",
"language_code": "en-GB",
"prompted": {
"input": (
"A warm, thoughtful astronomer in his late 60s with a gentle"
" British accent, speaking with quiet wonder."
)
},
},
)
print(f"Created voice ID: {created_voice.id}")
# Save the generated sample_audio preview (audio/wav) returned by CreateVoice
if created_voice.sample_audio and created_voice.sample_audio.data:
with open("voice_preview.wav", "wb") as f:
f.write(base64.b64decode(created_voice.sample_audio.data))
JavaScript
import * as fs from "node:fs";
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
// 1. Design a custom voice persona from natural language
const createdVoice = await ai.voices.create({
store: true,
voice: {
model: "gemini-3.8-flash-tts",
type: "prompted",
display_name: "Warm British Astronomer",
gender: "male",
language_code: "en-GB",
prompted: {
input:
"A warm, thoughtful astronomer in his late 60s with a gentle British accent, speaking with quiet wonder.",
},
},
});
console.log(`Created voice ID: ${createdVoice.id}`);
// Save the generated sample_audio preview (audio/wav) returned by CreateVoice
if (createdVoice.sample_audio?.data) {
fs.writeFileSync(
"voice_preview.wav",
Buffer.from(createdVoice.sample_audio.data, "base64")
);
}
REST
curl "https://generativelanguage.googleapis.com/v1beta/voices" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"store": true,
"voice": {
"model": "gemini-3.8-flash-tts",
"type": "prompted",
"display_name": "Warm British Astronomer",
"gender": "male",
"language_code": "en-GB",
"prompted": {
"input": "A warm, thoughtful astronomer in his late 60s with a gentle British accent, speaking with quiet wonder."
}
}
}' | tee created_voice.json | jq -r '.sample_audio.data' | base64 --decode > voice_preview.wav
Fonctionnement de la conception vocale
- Créer une voix guidée : appelez
voices.create(POST /v1beta/voices) avectype="prompted"etstore=True. - Recevoir un aperçu permanent
voice_idetsample_audio: l'API génère l'identité vocale, la stocke dans votre projet et renvoie un ID permanent (par exemple,voice_abc123...) avecsample_audio(mime_type: "audio/wav",dataencodé en base64) contenant l'aperçu audio généré pour la voix. - Synthétiser la parole : transmettez
voice_idpartout où un nom de voix est accepté dans vos requêtes de synthèse.
Synthétiser la voix avec la voix que vous avez conçue
Une fois que vous avez créé une voix, transmettez son id (voice_...) à l'API Interactions pour générer la synthèse vocale :
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.8-flash-tts",
input=[{
"type": "user_input",
"content": [{
"type": "text",
"text": (
"Look out past the rings of Saturn. Those faint photons left"
" their source millions of years ago."
),
"annotations": [{
"type": "speech_metadata",
"style": "reflective and awe-inspired",
}],
}],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"voice": created_voice.id},
]
},
)
with open("designed_voice.wav", "wb") as f:
f.write(base64.b64decode(interaction.output_audio.data))
JavaScript
import * as fs from "node:fs";
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
const interaction = await ai.interactions.create({
model: "gemini-3.8-flash-tts",
input: [{
type: "user_input",
content: [{
type: "text",
text: "Look out past the rings of Saturn. Those faint photons left their source millions of years ago.",
annotations: [{
type: "speech_metadata",
style: "reflective and awe-inspired",
}],
}],
}],
response_format: { type: "audio" },
generation_config: {
speech_config: [
{ voice: createdVoice.id },
],
},
});
fs.writeFileSync("designed_voice.wav", Buffer.from(interaction.output_audio.data, "base64"));
REST
curl "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"model": "gemini-3.8-flash-tts",
"input": [{
"type": "user_input",
"content": [{
"type": "text",
"text": "Look out past the rings of Saturn. Those faint photons left their source millions of years ago.",
"annotations": [{
"type": "speech_metadata",
"style": "reflective and awe-inspired"
}]
}]
}],
"response_format": {"type": "audio"},
"generation_config": {
"speech_config": [
{"voice": "voice_YOUR_DESIGNED_VOICE_ID"}
]
}
}'
Gérer vos voix
Vous pouvez lister, filtrer, inspecter et supprimer vos voix stockées à tout moment à l'aide de l'API Voices (consultez Bibliothèque de voix étendue et filtrage pour tous les paramètres de filtre).
- Limites de stockage et valeur TTL : les voix avec état (
store=True, partagées entre les voix incitées et répliquées) sont limitées à 200 voix par projet et ont une valeur TTL (Time To Live) d'un an. Disponibilité de
sample_audio:voices.create()(CreateVoice) etvoices.get()(GetVoice) renseignentsample_audio(mime_type: "audio/wav",dataencodé en base64) pour les voix"prompted". Pour que la fiche reste légère,voices.list()(ListVoices) ometsample_audio(etsample_audion'est pas défini pour les voix"replicated"et"prebuilt").
Python
from google import genai
client = genai.Client()
# List stored prompted voices in your project filtered by language
response = client.voices.list(
type_=["prompted"],
language_code=["en-US", "en-GB"],
)
for voice in response.voices or []:
print(voice.id, voice.display_name, voice.type)
# Retrieve a specific voice by ID
voice_details = client.voices.get(id=created_voice.id)
# Delete a stored custom voice
client.voices.delete(id=created_voice.id)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
// List stored prompted voices in your project filtered by language
const response = await ai.voices.list({
type: ["prompted"],
language_code: ["en-US", "en-GB"],
});
for (const voice of response.voices ?? []) {
console.log(voice.id, voice.display_name, voice.type);
}
// Retrieve a specific voice by ID
const voiceDetails = await ai.voices.get(createdVoice.id);
// Delete a stored custom voice
await ai.voices.delete(createdVoice.id);
REST
# List stored prompted voices filtered by language
curl -G "https://generativelanguage.googleapis.com/v1beta/voices" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
--data-urlencode "type=prompted" \
--data-urlencode "language_code=en-US" \
--data-urlencode "language_code=en-GB"
# Retrieve a specific voice by ID
curl "https://generativelanguage.googleapis.com/v1beta/voices/voice_YOUR_DESIGNED_VOICE_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
# Delete a stored custom voice
curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/voices/voice_YOUR_DESIGNED_VOICE_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
Bonnes pratiques concernant les requêtes pour la conception vocale
- Définissez les caractéristiques vocales permanentes dans la conception de la voix, et non dans
style: définissez les caractéristiques immuables (âge, genre, timbre, texture vocale et accent régional, par exemple) lorsque vous créez la voix dansvoices.create. - Réservez
speech_metadata.stylepour les émotions situationnelles : une fois votre voix personnalisée créée, utilisez de courtes requêtesstyle(par exemple,"whispered urgently"ou"cheerful and energetic") pour orienter le jeu d'acteur tour par tour sans modifier l'identité principale du locuteur. - Soyez précis et concis : une description claire en une ou deux phrases (par exemple, une commentatrice sportive énergique et dynamique d'une trentaine d'années avec un léger accent du Midwest) produit des résultats plus clairs et plus cohérents que des paragraphes contradictoires ou trop longs.
Étape suivante
- Découvrez comment répliquer la voix d'un locuteur existant dans Réplication de la voix.
- Découvrez la mise en forme au niveau du tour de parole, les balises intégrées et les dialogues à plusieurs locuteurs dans le guide Text-to-Speech.