Gemini API, yerel metin okuma (TTS) oluşturma özelliklerini kullanarak metin girişini tek veya çok hoparlörlü seslere dönüştürebilir. Metin okuma (TTS) üretimi kontrol edilebilir. Bu sayede, etkileşimleri yapılandırmak ve sesin stilini, aksanını, hızını ve tonunu yönlendirmek için doğal dil kullanabilirsiniz.
TTS özelliği, etkileşimli, yapılandırılmamış ses ve çok formatlı girişler ve çıkışlar için tasarlanan Live API aracılığıyla sağlanan konuşma oluşturma özelliğinden farklıdır. Live API, dinamik sohbet bağlamlarında mükemmel performans gösterirken Gemini API aracılığıyla TTS, stil ve ses üzerinde ayrıntılı kontrolle metinlerin tam olarak okunmasını gerektiren senaryolar için (ör. podcast veya sesli kitap oluşturma) özel olarak tasarlanmıştır.
Bu kılavuzda, metinden tek veya çok konuşmacılı sesin nasıl oluşturulacağı gösterilmektedir.
Başlamadan önce
Desteklenen modeller bölümünde listelendiği gibi, yerel metin okuma (TTS) özelliklerine sahip bir Gemini 2.5 model varyantı kullandığınızdan emin olun. En iyi sonuçları elde etmek için hangi modelin kullanım alanınıza en uygun olduğunu düşünün.
Geliştirmeye başlamadan önce AI Studio'da Gemini 2.5 TTS modellerini test etmeniz faydalı olabilir.
Tek konuşmacılı metin okuma
Metni tek konuşmacılı sese dönüştürmek için yanıt biçimini "ses" olarak ayarlayın ve VoiceConfig
ayarlanmış bir SpeechConfig
nesnesi iletin.
Önceden oluşturulmuş çıkış sesleri arasından bir ses adı seçmeniz gerekir.
Bu örnek, modelden gelen çıkış sesini bir wave dosyasına kaydeder:
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
Birden fazla konuşmacı için metin okuma
Çok hoparlörlü ses için her hoparlörün (en fazla 2) SpeakerVoiceConfig
olarak yapılandırıldığı bir MultiSpeakerVoiceConfig
nesnesi gerekir.
Her speaker
öğesini, istemde kullanılan adlarla tanımlamanız gerekir:
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
İstemlerle konuşma stilini kontrol etme
Hem tek hem de çok hoparlörlü TTS için doğal dil istemlerini kullanarak stil, ton, vurgu ve hızı kontrol edebilirsiniz. Örneğin, tek konuşmacılı bir istemde şunları söyleyebilirsiniz:
Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"
Birden fazla konuşmacının yer aldığı istemlerde, her konuşmacının adını ve ilgili transkripti modele sağlayın. Ayrıca her konuşmacı için ayrı ayrı rehberlik de sağlayabilirsiniz:
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!
Stili veya duyguyu daha da vurgulamak için, iletmek istediğiniz stile ya da duyguya uygun bir ses seçeneği kullanmayı deneyin. Örneğin, önceki istemde Enceladus'un fısıltılı sesi "yorgun" ve "sıkılmış" kelimelerini vurgulayabilirken Puck'ın neşeli tonu "heyecanlı" ve "mutlu" kelimelerini tamamlayabilir.
Sese dönüştürme istemi oluşturma
TTS modelleri yalnızca ses çıkışı verir ancak önce transkript oluşturmak için diğer modelleri kullanabilir, ardından bu transkripti TTS modeline aktararak yüksek sesle okutabilirsiniz.
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();
Ses seçenekleri
TTS modelleri, voice_name
alanında aşağıdaki 30 ses seçeneğini destekler:
Zephyr -- Parlak | Puck -- Upbeat | Charon -- Bilgilendirici |
Kore -- Firm | Fenrir -- Heyecanlı | Leda -- Genç |
Orus -- Firması | Aoede -- Breezy | Callirrhoe -- Sakin |
Autonoe -- Parlak | Enceladus -- Breathy | Iapetus -- Temizle |
Umbriel -- Rahat | Algieba -- Akış sorunsuz | Despina -- Pürüzsüz |
Erinome -- Temizle | Algenib -- Gravelly | Rasalgethi -- Bilgilendirici |
Laomedeia -- Upbeat | Achernar -- Yumuşak | Alnilam -- Firm |
Schedar -- Eşit | Gacrux -- Yetişkin | Pulcherrima -- İleri |
Achird -- Dostu | Zubenelgenubi -- Basit | Vindemiatrix -- Nazik |
Sadachbia -- Lively | Sadaltager -- Bilgili | Sulafat -- Sıcak |
Tüm ses seçeneklerini AI Studio'da dinleyebilirsiniz.
Desteklenen diller
TTS modelleri, giriş dilini otomatik olarak algılar. Aşağıdaki 24 dili destekler:
Dil | BCP-47 kodu | Dil | BCP-47 kodu |
---|---|---|---|
Arapça (Mısır) | ar-EG |
Almanca (Almanya) | de-DE |
İngilizce (ABD) | en-US |
İspanyolca (ABD) | es-US |
Fransızca (Fransa) | fr-FR |
Hintçe (Hindistan) | hi-IN |
Endonezce (Endonezya) | id-ID |
İtalyanca (İtalya) | it-IT |
Japonca (Japonya) | ja-JP |
Korece (Güney Kore) | ko-KR |
Portekizce (Brezilya) | pt-BR |
Rusça (Rusya) | ru-RU |
Felemenkçe (Hollanda) | nl-NL |
Lehçe (Polonya) | pl-PL |
Tay Dili (Tayland) | th-TH |
Türkçe (Türkiye) | tr-TR |
Vietnamca (Vietnam) | vi-VN |
Romence (Romanya) | ro-RO |
Ukraynaca (Ukrayna) | uk-UA |
Bengalce (Bangladeş) | bn-BD |
İngilizce (Hindistan) | en-IN ve hi-IN paketi |
Marathice (Hindistan) | mr-IN |
Tamilce (Hindistan) | ta-IN |
Telugu dili (Hindistan) | te-IN |
Desteklenen modeller
Model | Tek konuşmacı | Çok hoparlörlü |
---|---|---|
Gemini 2.5 Flash Preview TTS | ✔️ | ✔️ |
Gemini 2.5 Pro Preview TTS | ✔️ | ✔️ |
Sınırlamalar
- TTS modelleri yalnızca metin girişlerini alabilir ve ses çıkışları oluşturabilir.
- TTS oturumunda 32 bin parçalık bağlam penceresi sınırı vardır.
- Dil desteği için Diller bölümünü inceleyin.
Sırada ne var?
- Ses üretimi yemek kitabını deneyin.
- Gemini'ın Live API'si, diğer yöntemlerle birlikte kullanabileceğiniz etkileşimli ses üretme seçenekleri sunar.
- Ses girişleriyle çalışma hakkında bilgi edinmek için Ses yorumlama rehberini inceleyin.