Mit Voice Design können Sie mithilfe des Gemini API-Endpunkts „Voices“ (POST /v1beta/voices) eine völlig neue, dauerhafte stimmliche Persona aus einer natürlichsprachlichen Beschreibung erstellen. Anstatt auf vorgefertigte Stimmen beschränkt zu sein oder Referenz-Audio aufzunehmen, können Sie das Alter, das Stimm-Timbre, den Akzent und die grundlegende Sprechweise einer Figur beschreiben und erhalten eine wiederverwendbare voice_...-ID, die in Ihrem Projekt gespeichert wird.
Die schnellste Möglichkeit, benutzerdefinierte Stimmen zu entwerfen, zu testen und zu iterieren, ist das interaktive Voice Design-Studio in Google AI Studio. Sie können benutzerdefinierte Identitäten aus Text-Prompts generieren, sie mit Beispielskripts testen und die resultierende voice_...-ID direkt in Ihren Anwendungscode kopieren.
Sowohl Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) als auch Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) unterstützen Voice Design.
Design-Stimme erstellen
Mit dem Google GenAI SDK (google-genai 2.25.0+ / @google/genai 2.24.0+) oder der REST API können Sie eine benutzerdefinierte Stimme aus einer Textbeschreibung erstellen. Bei "prompted"-Stimmen geben sowohl voices.create (CreateVoice) als auch voices.get (GetVoice) ein reines Ausgabefeld sample_audio (mime_type: "audio/wav", base64-codiertes data) zurück, sodass Sie die generierte Stimme sofort anhören können:
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
So funktioniert das Voice-Design
- Sprache mit Prompt erstellen:Rufen Sie
voices.create(POST /v1beta/voices) mittype="prompted"undstore=Trueauf. - Dauerhafte
voice_id- undsample_audio-Vorschau erhalten:Die API generiert die stimmliche Identität, speichert sie in Ihrem Projekt und gibt eine dauerhafte ID (z. B.voice_abc123...) zusammen mitsample_audio(mime_type: "audio/wav", base64-codiertesdata) zurück, das die generierte Vorschau-Audio für die Stimme enthält. - Sprache synthetisieren:Übergeben Sie
voice_idüberall dort, wo in Ihren Syntheseanfragen ein Sprachname akzeptiert wird.
Sprache mit Ihrer benutzerdefinierten Stimme synthetisieren
Nachdem Sie eine Stimme erstellt haben, übergeben Sie deren id (voice_...) an die Interactions API, um Sprache zu generieren:
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"}
]
}
}'
Stimmen verwalten
Sie können Ihre gespeicherten Stimmen jederzeit mit der Voices API auflisten, filtern, prüfen und löschen (alle Filterparameter finden Sie unter Erweiterte Stimmenbibliothek und Filterung).
- Speicherlimits und TTL:Für zustandsbehaftete Stimmen (
store=True, die für angeforderte und replizierte Stimmen freigegeben sind) gilt ein Limit von 200 Stimmen pro Projekt und eine Gültigkeitsdauer von 1 Jahr (Time-to-Live, TTL). Verfügbarkeit von
sample_audio:voices.create()(CreateVoice) undvoices.get()(GetVoice) füllensample_audio(mime_type: "audio/wav", base64-codiertesdata) für"prompted"-Stimmen aus. Damit der Eintrag übersichtlich bleibt, wird invoices.list()(ListVoices)sample_audioausgelassen (undsample_audioist für"replicated"- und"prebuilt"-Stimmen nicht festgelegt).
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"
Best Practices für Prompts für das Voice-Design
- Dauerhafte stimmliche Merkmale im Voice-Design festlegen, nicht in
style:Lege unveränderliche Merkmale wie Alter, Geschlecht, Klangfarbe, stimmliche Textur und regionalen Akzent beim Erstellen der Stimme invoices.createfest. speech_metadata.stylefür situationsbezogene Emotionen reservieren:Nachdem Sie Ihre benutzerdefinierte Stimme erstellt haben, verwenden Sie kurzestyle-Prompts (z. B."whispered urgently"oder"cheerful and energetic"), um die schrittweise Darstellung zu steuern, ohne die grundlegende Identität des Sprechers zu ändern.- Spezifisch und prägnant sein:Eine klare Beschreibung in ein bis zwei Sätzen (z. B. „Eine dynamische Sportmoderatorin in den Dreißigern mit leichtem Akzent aus dem Mittleren Westen“) führt zu besseren, konsistenteren Ergebnissen als widersprüchliche oder zu lange Absätze.
Nächste Schritte
- Weitere Informationen zur Stimmreplikation
- Weitere Informationen zu Stil auf Turn-Ebene, Inline-Tags und Dialogen mit mehreren Sprechern finden Sie im Leitfaden zur Sprachsynthese.