API Gemini позволяет преобразовывать текстовый ввод в аудиопоток с одним или несколькими говорящими, используя возможности генерации речи (TTS) Gemini. Генерация речи (TTS) является управляемой , то есть вы можете использовать естественный язык для структурирования взаимодействия и управления стилем , акцентом , темпом и тоном аудио.
Функция преобразования текста в речь (TTS) отличается от генерации речи, предоставляемой через Live API , которая предназначена для интерактивного, неструктурированного аудио и многомодальных входных и выходных данных. В то время как Live API превосходно подходит для динамичных разговорных контекстов, TTS через Gemini API разработана для сценариев, требующих точного воспроизведения текста с тонкой настройкой стиля и звучания, таких как создание подкастов или аудиокниг.
В этом руководстве показано, как создавать аудиозаписи с одним или несколькими говорящими из текста.
Прежде чем начать
Убедитесь, что вы используете модель Gemini 2.5 с поддержкой преобразования текста в речь (TTS) Gemini, указанную в разделе «Поддерживаемые модели» . Для достижения оптимальных результатов определите, какая модель лучше всего подходит для ваших конкретных задач.
Возможно, вам будет полезно протестировать модели Gemini TTS в AI Studio, прежде чем приступать к разработке.
Синхронизация речи и речи с одним динамиком
Для преобразования текста в аудиопоток от одного говорящего установите режим ответа на "аудио" и передайте объект speech_config с именем голоса. Вам потребуется выбрать имя голоса из предварительно созданных выходных голосов .
В этом примере выходной аудиофайл модели сохраняется в формате WAV:
Python
from google import genai
import wave
import base64
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()
interaction = client.interactions.create(
model="gemini-3.1-flash-tts-preview",
input="Say cheerfully: Have a wonderful day!",
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"voice": "Kore"}
]
}
)
wave_file('out.wav', base64.b64decode(interaction.output_audio.data))
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 client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: "gemini-3.1-flash-tts-preview",
input: "Say cheerfully: Have a wonderful day!",
response_format: { type: 'audio' },
generation_config: {
speech_config: [
{ voice: 'Kore' }
]
},
});
const audioBuffer = Buffer.from(interaction.output_audio.data, 'base64');
await saveWaveFile('out.wav', audioBuffer);
}
await main();
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-tts-preview",
"input": "Say cheerfully: Have a wonderful day!",
"response_format": {
"type": "audio"
},
"generation_config": {
"speech_config": [
{ "voice": "Kore" }
]
}
}'
Вы можете получить сгенерированные аудиоданные, используя свойство interaction.output_audio , которое возвращает последний сгенерированный аудиоблок. Подробную информацию об удобных свойствах см. в обзоре взаимодействий .
Многоканальное синтезирование речи
Для многоканального аудио вам потребуется объект multi_speaker_voice_config , в котором каждый динамик (до 2) будет настроен как speaker_voice_config . Необходимо указать для каждого speaker те же имена, что и в командной строке :
Python
from google import genai
import wave
import base64
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?"""
interaction = client.interactions.create(
model="gemini-3.1-flash-tts-preview",
input=prompt,