Ses tasarımı, Gemini API Voices uç noktasını (POST /v1beta/voices) kullanarak doğal dil açıklamasıyla yepyeni ve kalıcı bir sesli karakter oluşturmanıza olanak tanır. Önceden oluşturulmuş seslerle veya referans ses kaydıyla sınırlı kalmak yerine bir karakterin yaşını, ses tonunu, aksanını ve temel sunumunu açıklayabilir ve projenize kaydedilen, yeniden kullanılabilir bir voice_... kimliği alabilirsiniz.
Özel sesleri tasarlamanın, denemenin ve yinelemenin en hızlı yolu, Google AI Studio'daki etkileşimli Ses Tasarımı stüdyosunu kullanmaktır. Metin istemlerinden özel karakterler oluşturabilir, bunları örnek senaryolarla test edebilir ve sonuçtaki voice_... kimliğini doğrudan uygulama kodunuza kopyalayabilirsiniz.
Hem Gemini 3.8 Flash TTS
(gemini-3.8-flash-tts) hem de
Gemini 3.8 Flash-Lite TTS
(gemini-3.8-flash-lite-tts) Voice tasarımını destekler.
Tasarlanmış bir ses oluşturma
Metin açıklamasından özel bir ses oluşturmak için Google GenAI SDK'sını (google-genai 2.25.0+ / @google/genai 2.24.0+) veya REST API'yi kullanın. "prompted" sesleri için hem voices.create (CreateVoice) hem de voices.get (GetVoice), yalnızca çıkış sample_audio alanı (mime_type: "audio/wav", base64 kodlu data) döndürür. Böylece, oluşturulan sesi hemen dinleyebilirsiniz:
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
Sesli tasarımın işleyiş şekli
- İstemli ses oluşturma:
type="prompted"vestore=Trueilevoices.create(POST /v1beta/voices) numarasını arayın. - Kalıcı bir
voice_idvesample_audioönizlemesi alma: API, ses kimliğini oluşturur, projenizde saklar ve ses için oluşturulan önizleme sesini içerensample_audio(mime_type: "audio/wav", base64 kodludata) ile birlikte kalıcı bir kimlik (ör.voice_abc123...) döndürür. - Konuşma sentezleme: Sentezleme isteklerinizde ses adının kabul edildiği her yerde
voice_idöğesini iletin.
Tasarladığınız sesle konuşma sentezleme
Bir ses oluşturduktan sonra konuşma üretmek için id (voice_...) değerini Etkileşimler API'sine iletin:
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"}
]
}
}'
Seslerinizi yönetme
Voices API'yi kullanarak kayıtlı seslerinizi istediğiniz zaman listeleyebilir, filtreleyebilir, inceleyebilir ve silebilirsiniz (tüm filtre parametreleri için Genişletilmiş Ses Kitaplığı ve filtreleme bölümüne bakın).
- Depolama sınırları ve TTL: Durumlu sesler (
store=True, istemli ve kopyalanmış sesler arasında paylaşılır) için proje başına 200 ses sınırı ve 1 yıllık TTL (geçerlilik süresi) vardır. sample_audioavailability:voices.create()(CreateVoice) vevoices.get()(GetVoice),"prompted"sesleri içinsample_audio(mime_type: "audio/wav", base64 kodludata) değerini doldurur. Listelemenin hafif olması içinvoices.list()(ListVoices),sample_audioöğesini atlar ("replicated"ve"prebuilt"sesleri içinsample_audioayarlanmamıştır).
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"
Sesli tasarım için istem yazmayla ilgili en iyi uygulamalar
- Kalıcı vokal özelliklerini
styleyerine Voice tasarımına yerleştirin:voices.create'da sesi oluştururken yaş, cinsiyet, tını, vokal dokusu ve bölgesel aksan gibi değişmez özellikleri tanımlayın. speech_metadata.stylekarakterini duruma bağlı duygular için kullanın: Özel sesiniz oluşturulduktan sonra, konuşmacının temel kimliğini değiştirmeden adım adım oyunculuğu yönlendirmek için kısastyleistemler (örneğin,"whispered urgently"veya"cheerful and energetic") kullanın.- Net ve kısa olun: 1-2 cümlelik net bir açıklama (ör. "30'lu yaşlarında, hafif Orta Batı aksanlı, canlı ve enerjik bir spor spikeri") çelişkili veya çok uzun paragraflara kıyasla daha temiz ve tutarlı sonuçlar verir.
Sırada ne var?
- Ses kopyalama özelliğinde mevcut bir konuşmacının sesini nasıl kopyalayacağınızı öğrenin.
- Metin okuma kılavuzunda dönüş seviyesinde stil oluşturma, satır içi etiketler ve birden fazla konuşmacının yer aldığı diyaloglar hakkında bilgi edinin.