Gemini API mund të transformojë hyrjen e tekstit në audio me një altoparlant të vetëm ose me shumë altoparlantë duke përdorur aftësitë e gjenerimit të tekstit në të folur (TTS). Gjenerimi i tekstit në të folur (TTS) është i kontrollueshëm , që do të thotë se mund të përdorni gjuhën natyrore për të strukturuar ndërveprimet dhe për të drejtuar stilin , theksin , ritmin dhe tonin e audios.
Aftësia TTS ndryshon nga gjenerimi i të folurit i ofruar përmes Live API , i cili është projektuar për hyrje dhe dalje audio interaktive, të pastrukturuar dhe multimodale. Ndërsa API Live shkëlqen në kontekstet dinamike të bisedës, TTS përmes API-së Gemini është përshtatur për skenarë që kërkojnë recitim të saktë teksti me kontroll të hollësishëm mbi stilin dhe tingullin, si p.sh. gjenerimi i podkasteve ose librave audio.
Ky udhëzues ju tregon se si të gjeneroni audio me një altoparlant dhe me shumë altoparlantë nga teksti.
Para se të filloni
Sigurohuni që të përdorni një variant modeli Gemini 2.5 me aftësi origjinale të tekstit në të folur (TTS), siç është renditur në seksionin Modelet e mbështetura . Për rezultate optimale, merrni parasysh se cili model i përshtatet më mirë rastit tuaj specifik të përdorimit.
Mund t'ju duket e dobishme të provoni modelet Gemini 2.5 TTS në AI Studio përpara se të filloni ndërtimin.
Tekst në fjalim me një folës të vetëm
Për të kthyer tekstin në audio me një altoparlant të vetëm, vendosni modalitetin e përgjigjes në "audio" dhe kaloni një objekt SpeechConfig
me grupin VoiceConfig
. Do t'ju duhet të zgjidhni një emër zëri nga zërat e parandërtuar në dalje .
Ky shembull ruan audion e daljes nga modeli në një skedar valë:
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();
PUSHIMI
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
Tekst në fjalim me shumë altoparlantë
Për audio me shumë altoparlantë, do t'ju duhet një objekt MultiSpeakerVoiceConfig
me secilin altoparlant (deri në 2) të konfiguruar si SpeakerVoiceConfig
. Do t'ju duhet të përcaktoni çdo speaker
me të njëjtët emra të përdorur në kërkesën :
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();
PUSHIMI
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
Kontrollimi i stilit të të folurit me udhëzime
Ju mund të kontrolloni stilin, tonin, theksin dhe ritmin duke përdorur kërkesat e gjuhës natyrore për TTS me një dhe me shumë altoparlantë. Për shembull, në një kërkesë me një altoparlant të vetëm, mund të thoni:
Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"
Në një kërkesë me shumë altoparlantë, jepni modelit emrin e secilit folës dhe transkriptin përkatës. Ju gjithashtu mund të jepni udhëzime për secilin folës individualisht:
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!
Provoni të përdorni një opsion zëri që korrespondon me stilin ose emocionin që dëshironi të përcillni, për ta theksuar edhe më shumë. Në kërkesën e mëparshme, për shembull, frymëmarrja e Enceladus -it mund të theksojë "të lodhur" dhe "të mërzitur", ndërsa toni optimist i Puck -ut mund të plotësojë "të emocionuar" dhe "të lumtur".
Gjenerimi i një kërkese për ta kthyer në audio
Modelet TTS nxjerrin vetëm audio, por ju mund të përdorni modele të tjera për të gjeneruar fillimisht një transkript dhe më pas ia kaloni atë transkript modelit TTS për ta lexuar me zë të lartë.
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();
Opsionet e zërit
Modelet TTS mbështesin 30 opsionet e mëposhtme të zërit në fushën e voice_name
:
Zephyr -- Bright | Puck -- optimist | Charon -- Informative |
Kore -- Firma | Fenrir -- Eksitim | Leda -- Rinor |
Orus -- Firma | Aoede -- Breezy | Callirrhoe -- I qetë |
Autonoe -- Bright | Enceladus -- Frymëmarrje | Iapetus -- I qartë |
Umbriel -- I qetë | Algieba -- I qetë | Despina -- E qetë |
Erinome -- E qartë | Algenib -- Zhavorr | Rasalgethi -- Informative |
Laomedeia -- optimist | Achernar -- I butë | Alnilam -- Firma |
Schedar -- Edhe | Gacrux -- I pjekur | Pulcherrima -- Përpara |
Achird -- Miqësore | Zubenelgenubi -- I rastësishëm | Vindemiatrix -- I butë |
Sadachbia -- E gjallë | Sadaltager -- I ditur | Sulafat -- I ngrohtë |
Mund të dëgjoni të gjitha opsionet e zërit në AI Studio .
Gjuhët e mbështetura
Modelet TTS zbulojnë automatikisht gjuhën e hyrjes. Ata mbështesin 24 gjuhët e mëposhtme:
Gjuha | Kodi i PKK-47 | Gjuha | Kodi i PKK-47 |
---|---|---|---|
Arabisht (Egjiptian) | ar-EG | gjermanisht (Gjermani) | de-DE |
Anglisht (SHBA) | en-US | Spanjisht (SHBA) | es-US |
Frëngjisht (Francë) | fr-FR | Hindi (Indi) | hi-IN |
Indonezisht (Indonezi) | id-ID | italisht (Itali) | it-IT |
japoneze (Japoni) | ja-JP | Koreane (Korea) | ko-KR |
Portugeze (Brazil) | pt-BR | Rusisht (Rusi) | ru-RU |
Hollandisht (Holandë) | nl-NL | polake (Poloni) | pl-PL |
Thai (Tajlandë) | th-TH | turqisht (Turqi) | tr-TR |
Vietnamisht (Vietnam) | vi-VN | rumanisht (Rumani) | ro-RO |
ukrainase (Ukrainë) | uk-UA | Bengalisht (Bangladesh) | bn-BD |
anglisht (Indi) | Paketa en-IN dhe hi-IN | Marathi (Indi) | mr-IN |
Tamile (Indi) | ta-IN | telugu (Indi) | te-IN |
Modelet e mbështetura
Model | Altoparlant i vetëm | Shumë altoparlantë |
---|---|---|
Gemini 2.5 Flash Preview TTS | ✔️ | ✔️ |
Gemini 2.5 Pro Preview TTS | ✔️ | ✔️ |
Kufizimet
- Modelet TTS mund të marrin vetëm hyrje teksti dhe të gjenerojnë dalje audio.
- Një seancë TTS ka një kufi të dritares së kontekstit prej 32 mijë shenjash.
- Rishikoni seksionin e Gjuhëve për mbështetje gjuhësore.
Çfarë është më pas
- Provoni librin e gatimit të gjenerimit audio .
- Gemini's Live API ofron opsione ndërvepruese të gjenerimit të audios që mund t'i ndërlidhni me modalitete të tjera.
- Për të punuar me hyrjet audio, vizitoni udhëzuesin e të kuptuarit të audios .