Функция Voice Design позволяет создать совершенно новый, постоянно используемый голосовой образ на основе описания на естественном языке с помощью конечной точки Gemini API Voices ( POST /v1beta/voices ). Вместо того чтобы ограничиваться готовыми голосами или эталонными аудиозаписями, вы можете описать возраст персонажа, тембр голоса, акцент и базовую манеру речи, и получить многократно используемый идентификатор voice_... сохраненный в вашем проекте.
Самый быстрый способ разработать, протестировать и доработать пользовательские голоса — это использовать интерактивную студию Voice Design в Google AI Studio . Вы можете создавать пользовательские персоны на основе текстовых подсказок, тестировать их с помощью примеров сценариев и копировать полученный идентификатор voice_... непосредственно в код вашего приложения.
Обе системы преобразования текста в речь ( Gemini 3.8 Flash TTS , gemini-3.8-flash-tts ) и Gemini 3.8 Flash-Lite TTS ( gemini-3.8-flash-lite-tts ) поддерживают голосовой дизайн.
Создайте свой собственный стиль.
Используйте SDK Google GenAI ( google-genai 2.25.0+ / @google/genai 2.24.0+) или REST API для создания пользовательского голоса на основе текстового описания. Для голосов, "prompted" , методы voices.create ( CreateVoice ) и voices.get ( GetVoice ) возвращают поле sample_audio только для вывода ( mime_type: "audio/wav" , data в кодировке base64), поэтому вы можете сразу же прослушать сгенерированный голос:
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")
);
}
ОТДЫХ
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
Как работает голосовой дизайн
- Создайте голос с подсказками: вызовите
voices.create(POST /v1beta/voices) сtype="prompted"иstore=True. - Получите постоянный
voice_idиsample_audioдля предварительного просмотра: API генерирует идентификатор голоса, сохраняет его в вашем проекте и возвращает постоянный ID (например,voice_abc123...) вместе сsample_audio(mime_type: "audio/wav", base64-закодированныеdata), содержащим сгенерированный аудиофайл для предварительного просмотра голоса. - Синтез речи: передавайте
voice_idвезде, где в запросах на синтез речи принимается имя голоса.
Синтезируйте речь с помощью созданного вами голоса.
После создания голоса передайте его id ( voice_... ) в API взаимодействий для генерации речи:
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"));
ОТДЫХ
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"}
]
}
}'
Контролируйте свой голос.
С помощью API для работы с голосами вы можете в любое время просматривать, фильтровать, проверять и удалять сохраненные голоса (см. раздел «Расширенная библиотека голосов и фильтрация» для получения информации обо всех параметрах фильтрации).
- Ограничения на объем хранилища и TTL: Для голосов с сохранением состояния (
store=True, используется совместно для голосов, запрашиваемых и дублируемых) установлено ограничение в 200 голосов на проект и TTL (время жизни) в 1 год . Доступность
sample_audio:voices.create()(CreateVoice) иvoices.get()(GetVoice) заполняютsample_audio(mime_type: "audio/wav", base64-закодированныеdata) для"prompted"голосов. Чтобы упростить вывод списка,voices.list()(ListVoices) пропускаетsample_audio(аsample_audioне устанавливается для"replicated"и"prebuilt"голосов).
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);
ОТДЫХ
# 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"
Рекомендации по внедрению передовых методов проектирования голосовых интерфейсов.
- При проектировании голоса, а не при
style, задавайте постоянные вокальные характеристики: определяйте неизменяемые параметры — такие как возраст, пол, тембр, тембр голоса и региональный акцент — при создании голоса вvoices.create. - Используйте
speech_metadata.styleтолько для описания ситуативных эмоций: после создания пользовательского голоса используйте короткиеstyleподсказки (например,"whispered urgently"или"cheerful and energetic"), чтобы направлять пошаговое исполнение реплик, не изменяя основной образ говорящего. - Будьте конкретны и лаконичны: четкое описание из 1-2 предложений (например , «Энергичная и энергичная спортивная комментаторша лет 30 с легким среднезападным акцентом» ) дает более четкие и согласованные результаты, чем противоречивые или слишком длинные абзацы.
Что дальше?
- Узнайте, как воспроизвести голос существующего говорящего в разделе «Воспроизведение голоса» .
- Изучите стилизацию уровней реплик, встроенные теги и диалоги с участием нескольких говорящих в руководстве по преобразованию текста в речь .