API Gemini позволяет преобразовывать текстовый ввод в аудиопоток с одним или несколькими говорящими, используя встроенные возможности генерации речи (TTS). Генерация речи (TTS) управляема , то есть вы можете использовать естественный язык для структурирования взаимодействия и управления стилем , акцентом , темпом и тоном аудио.
Функция преобразования текста в речь (TTS) отличается от генерации речи, предоставляемой через Live API , которая предназначена для интерактивного, неструктурированного аудио и многомодальных входных и выходных данных. В то время как Live API превосходно подходит для динамичных разговорных контекстов, TTS через Gemini API разработана для сценариев, требующих точного воспроизведения текста с тонкой настройкой стиля и звучания, таких как создание подкастов или аудиокниг.
В этом руководстве показано, как создавать аудиозаписи с одним или несколькими говорящими из текста.
Прежде чем начать
Убедитесь, что вы используете модель Gemini 2.5 с поддержкой преобразования текста в речь (TTS), указанную в разделе «Поддерживаемые модели» . Для достижения оптимальных результатов определите, какая модель лучше всего подходит для ваших конкретных задач.
Возможно, вам будет полезно протестировать модели синтеза речи Gemini 2.5 в AI Studio, прежде чем приступать к разработке.
Преобразование текста в речь для одного говорящего
Для преобразования текста в аудиопоток от одного говорящего установите режим ответа на "аудио" и передайте объект SpeechConfig с установленным параметром VoiceConfig . Вам потребуется выбрать имя голоса из предварительно созданных выходных голосов .
В этом примере выходной аудиофайл модели сохраняется в формате WAV:
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();
ОТДЫХ
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
Преобразование текста в речь для нескольких говорящих
Для многоканального аудио вам потребуется объект MultiSpeakerVoiceConfig , в котором каждый динамик (до 2) будет настроен как SpeakerVoiceConfig . Необходимо указать для каждого speaker те же имена, что и в командной строке :
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();
ОТДЫХ
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
Управление стилем речи с помощью подсказок
Вы можете управлять стилем, тоном, акцентом и темпом речи, используя подсказки на естественном языке как для синтеза речи с одним говорящим, так и с несколькими. Например, в подсказке для одного говорящего вы можете сказать:
Say in an spooky whisper:
"By the pricking of my thumbs...
Something wicked this way comes"
В задании с участием нескольких говорящих укажите модели имена каждого говорящего и соответствующие стенограммы. Вы также можете дать указания каждому говорящему индивидуально:
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!
Попробуйте использовать вариант голоса , соответствующий стилю или эмоции, которую вы хотите передать, чтобы еще больше подчеркнуть ее. Например, в предыдущем примере хриплый голос Энцелада может подчеркнуть слова «усталость» и «скука», а бодрый тон Пака — слова «возбуждение» и «радость».
Создание запроса на преобразование в аудиоформат.
Модели TTS воспроизводят только аудио, но вы можете использовать другие модели для предварительного создания транскрипции, а затем передать эту транскрипцию модели TTS для озвучивания.
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();
Варианты голосового управления
Модели TTS поддерживают следующие 30 вариантов голоса в поле voice_name :
| Зефир -- Яркий | Пак — оптимистичный | Харон — информативный |
| Коре -- Фирма | Фенрир — Возбудимый | Леда — Юная |
| Орус — Фирма | Аоэде -- Бризи | Каллирро — добродушный |
| Автоное — Яркое | Энцелад — Хрипловатый | Япет — Ясный |
| Умбриэль — добродушный | Алгиеба -- Гладкая | Деспина -- Гладкая |
| Эрином -- Чистый | Алгениб -- Грейвли | Расалгети — информативный |
| Лаомедея — оптимистичная | Ахернар — Мягкий | Альнилам -- Фирма |
| Шедар — даже | Гакрукс — зрелый | Пульчеррима -- Нападающий |
| Ахирд — Дружелюбный | Зубенельгенуби -- Повседневный | Виндемиатрикс -- Нежная |
| Садахбия -- Оживлённый | Садалтагер — знающий специалист | Сулафат -- Теплый |
В AI Studio вы можете прослушать все варианты озвучки.
Поддерживаемые языки
Модели TTS автоматически определяют язык ввода. Они поддерживают следующие 24 языка:
| Язык | Код BCP-47 | Язык | Код BCP-47 |
|---|---|---|---|
| Арабский (египетский) | ar-EG | Немецкий (Германия) | de-DE |
| Английский (США) | en-US | Испанский (США) | es-US |
| Французский (Франция) | fr-FR | Хинди (Индия) | hi-IN |
| Индонезийский (Индонезия) | id-ID | Итальянский (Италия) | it-IT |
| Японский (Япония) | ja-JP | Корейский (Корея) | ko-KR |
| Португальский (Бразилия) | pt-BR | Русский (Россия) | ru-RU |
| Голландский (Нидерланды) | nl-NL | Польский (Польша) | pl-PL |
| Тайский (Таиланд) | th-TH | Турецкий (Турция) | tr-TR |
| Вьетнамский (Вьетнам) | vi-VN | Румынский (Румыния) | ro-RO |
| Украинский (Украина) | uk-UA | Бенгальский (Бангладеш) | bn-BD |
| Английский (Индия) | en-IN & hi-IN bundle | Маратхи (Индия) | mr-IN |
| Тамильский (Индия) | ta-IN | Телугу (Индия) | te-IN |
Поддерживаемые модели
| Модель | Один динамик | Многоканальный |
|---|---|---|
| Gemini 2.5 Flash Preview TTS | ✔️ | ✔️ |
| Gemini 2.5 Pro Preview TTS | ✔️ | ✔️ |
Ограничения
- Модели TTS могут только принимать текстовый ввод и генерировать аудиовыход.
- В рамках сессии синтеза речи (TTS) существует ограничение на контекстное окно в 32 000 токенов.
- Для получения информации о доступных языках ознакомьтесь с разделом «Языки».
Руководство по подсказкам
Модель преобразования текста в речь (TTS) Gemini Native Audio Generation отличается от традиционных моделей TTS использованием обширной языковой модели, которая знает не только что сказать, но и как это сказать .
Чтобы разблокировать эту возможность, пользователи могут представить себя режиссерами, создающими сцену для виртуального актера озвучивания. Для создания сценария мы рекомендуем учитывать следующие компоненты: аудиопрофиль , определяющий основную идентичность и архетип персонажа; описание сцены , устанавливающее физическую обстановку и эмоциональную «атмосферу»; и заметки режиссера , предлагающие более точные указания по стилю, акценту и темпу исполнения.
Предоставляя точные инструкции, такие как указание регионального акцента, специфических паралингвистических особенностей (например, придыхания) или темпа речи, пользователи могут использовать контекстную осведомленность модели для создания высокодинамичных, естественных и выразительных аудиозаписей. Для оптимальной работы мы рекомендуем согласовывать подсказки в расшифровке и подсказки режиссера, чтобы «кто это говорит» соответствовало «что это говорится» и «как это говорится».
Цель этого руководства — предложить основные направления и вдохновить на новые идеи при разработке аудиоконтента с использованием генератора аудио Gemini TTS. Мы с нетерпением ждём ваших творений!
Побуждающая структура
В идеале, хорошо продуманное задание должно включать следующие элементы, которые в совокупности создают великолепное выступление:
- Аудиопрофиль — формирует образ голоса, определяя характер, архетип и любые другие характеристики, такие как возраст, происхождение и т. д.
- Описание обстановки — создает атмосферу. Описывает как физическое окружение, так и общую «атмосферу».
- Заметки режиссера — рекомендации по исполнению, в которых вы можете указать, какие указания важны для виртуального актера. Примеры: стиль, дыхание, темп, артикуляция и акцент.
- Пример контекста — задаёт модели контекстную отправную точку, благодаря чему ваш виртуальный актёр естественным образом попадает в созданную вами сцену.
- Текст расшифровки — это текст, который модель будет произносить. Для достижения наилучших результатов помните, что тема расшифровки и стиль письма должны соответствовать вашим указаниям.
Пример полного текста запроса:
# AUDIO PROFILE: Jaz R.
## "The Morning Hype"
## THE SCENE: The London Studio
It is 10:00 PM in a glass-walled studio overlooking the moonlit London skyline,
but inside, it is blindingly bright. The red "ON AIR" tally light is blazing.
Jaz is standing up, not sitting, bouncing on the balls of their heels to the
rhythm of a thumping backing track. Their hands fly across the faders on a
massive mixing desk. It is a chaotic, caffeine-fueled cockpit designed to wake
up an entire nation.
### DIRECTOR'S NOTES
Style:
* The "Vocal Smile": You must hear the grin in the audio. The soft palate is
always raised to keep the tone bright, sunny, and explicitly inviting.
* Dynamics: High projection without shouting. Punchy consonants and elongated
vowels on excitement words (e.g., "Beauuutiful morning").
Pace: Speaks at an energetic pace, keeping up with the fast music. Speaks
with A "bouncing" cadence. High-speed delivery with fluid transitions — no dead
air, no gaps.
Accent: Jaz is from Brixton, London
### SAMPLE CONTEXT
Jaz is the industry standard for Top 40 radio, high-octane event promos, or any
script that requires a charismatic Estuary accent and 11/10 infectious energy.
#### TRANSCRIPT
Yes, massive vibes in the studio! You are locked in and it is absolutely
popping off in London right now. If you're stuck on the tube, or just sat
there pretending to work... stop it. Seriously, I see you. Turn this up!
We've got the project roadmap landing in three, two... let's go!
Подробные стратегии подсказок
Давайте разберем каждый элемент задания.
Аудио профиль
Кратко опишите характер персонажа.
- Имя. Присвоение имени персонажу помогает создать целостную модель и обеспечить гармоничное взаимодействие с игрой актеров. Обращайтесь к персонажу по имени при описании сцены и контекста.
- Роль. Основная идентичность и архетип персонажа, разыгрывающего сцену. Например, радиоведущий, подкастер, новостной репортер и т. д.
Примеры:
# AUDIO PROFILE: Jaz R.
## "The Morning Hype"
# AUDIO PROFILE: Monica A.
## "The Beauty Influencer"
Сцена
Опишите контекст сцены, включая место действия, настроение и детали окружающей среды, которые задают тон и атмосферу. Опишите, что происходит вокруг персонажа и как это на него влияет. Сцена создает контекст для всего взаимодействия и тонко, органично направляет актерскую игру.
Примеры:
## THE SCENE: The London Studio
It is 10:00 PM in a glass-walled studio overlooking the moonlit London skyline,
but inside, it is blindingly bright. The red "ON AIR" tally light is blazing.
Jaz is standing up, not sitting, bouncing on the balls of their heels to the
rhythm of a thumping backing track. Their hands fly across the faders on a
massive mixing desk. It is a chaotic, caffeine-fueled cockpit designed to
wake up an entire nation.
## THE SCENE: Homegrown Studio
A meticulously sound-treated bedroom in a suburban home. The space is
deadened by plush velvet curtains and a heavy rug, but there is a
distinct "proximity effect."
Примечания директора
Этот важный раздел содержит конкретные рекомендации по выполнению задания. Вы можете пропустить все остальные элементы, но мы рекомендуем включить этот раздел.
Определяйте только то, что важно для исполнения, стараясь не переусложнять. Слишком много строгих правил ограничит творческий потенциал моделей и может привести к ухудшению исполнения. Сбалансируйте описание роли и сцены с конкретными правилами исполнения.
Наиболее распространенные указания касаются стиля, темпа и акцента , но модель не ограничивается ими и не требует их соблюдения. Вы можете добавить собственные инструкции, охватывающие любые дополнительные детали, важные для вашего выступления, и указать их в той степени, в какой это необходимо.
Например:
### DIRECTOR'S NOTES
Style: Enthusiastic and Sassy GenZ beauty YouTuber
Pacing: Speaks at an energetic pace, keeping up with the extremely fast, rapid
delivery influencers use in short form videos.
Accent: Southern california valley girl from Laguna Beach |
Стиль:
Задает тон и стиль создаваемой речи. Включите такие слова, как «оптимистичный», «энергичный», «расслабленный», «скучный» и т. д., чтобы направлять выступление. Будьте подробны и предоставляйте столько деталей, сколько необходимо: «Заразительный энтузиазм. Слушатель должен почувствовать себя частью масштабного, захватывающего общественного события» — это звучит лучше, чем просто «энергичный и полный энтузиазма».
Вы даже можете попробовать термины, популярные в индустрии озвучивания, например, «голосовая улыбка». Вы можете накладывать столько стилистических особенностей, сколько захотите.
Примеры:
Простая эмоция
DIRECTORS NOTES
...
Style: Frustrated and angry developer who can't get the build to run.
...
Более глубокая
DIRECTORS NOTES
...
Style: Sassy GenZ beauty YouTuber, who mostly creates content for YouTube Shorts.
...
Сложный
DIRECTORS NOTES
Style:
* The "Vocal Smile": You must hear the grin in the audio. The soft palate is
always raised to keep the tone bright, sunny, and explicitly inviting.
*Dynamics: High projection without shouting. Punchy consonants and
elongated vowels on excitement words (e.g., "Beauuutiful morning").
Акцент:
Опишите желаемый акцент. Чем точнее вы укажете, тем лучше будет результат. Например, используйте « британский английский акцент, как его слышат в Кройдоне, Англия » вместо « британский акцент ».
Примеры:
### DIRECTORS NOTES
...
Accent: Southern california valley girl from Laguna Beach
...
### DIRECTORS NOTES
...
Accent: Jaz is a from Brixton, London
...
Темп:
Общий темп и вариации темпа на протяжении всего произведения.
Примеры:
Простой
### DIRECTORS NOTES
...
Pacing: Speak as fast as possible
...
Более глубокая
### DIRECTORS NOTES
...
Pacing: Speaks at a faster, energetic pace, keeping up with fast paced music.
...
Сложный
### DIRECTORS NOTES
...
Pacing: The "Drift": The tempo is incredibly slow and liquid. Words bleed into each other. There is zero urgency.
...
Попробуйте
Попробуйте сами некоторые из этих примеров в AI Studio , поэкспериментируйте с нашим приложением TTS и позвольте Gemini посадить вас в кресло режиссера. Помните об этих советах, чтобы создавать великолепные вокальные выступления:
- Помните, что весь текст должен быть связным – сценарий и режиссура неразрывно связаны между собой и создают великолепное представление.
- Не обязательно описывать всё до мелочей, иногда предоставление модели пространства для самовыражения помогает добиться естественности. (Как и талантливому актеру)
- Если вы когда-нибудь почувствуете, что зашли в тупик, попросите Близнецов помочь вам в создании сценария или выступления.
Что дальше?
- Попробуйте книгу рецептов по созданию аудиофайлов .
- API Live от Gemini предлагает интерактивные возможности генерации звука, которые можно комбинировать с другими методами.
- Для работы с аудиовходами посетите руководство по пониманию звука .