«میانای برنامهسازی کاربردی Gemini» میتواند ورودی نوشتاری را بااستفاده از قابلیتهای تولید نوشتار به گفتار (TTS) Gemini به صدای تکگوینده یا چندگوینده تبدیل کند.
تولید نوشتار به گفتار
قابلکنترل است، یعنی میتوانید
فرادادههای ساختاریافته نوبت (speech_metadata) و برچسبهای صوتی درونخطی را ترکیب کنید
تا سبک، لهجه، سرعت، و لحن صدا را هدایت کنید.
قابلیت «تبدیل نوشتار به گفتار» با تولید گفتار ارائهشده ازطریق Live API متفاوت است، که برای ورودیها و خروجیهای چندحالته، تعاملی، و بدون ساختار طراحی شده است. درحالیکه Live API در بافتهای مکالمهای پویا برتری دارد، «تبدیل نوشتار به گفتار» ازطریق Gemini API برای سناریوهایی طراحی شده است که نیاز به خواندن دقیق نوشتار با کنترل دقیق بر سبک و صدا دارند، مانند تولید پادکست یا کتاب صوتی.
این راهنما به شما نشان میدهد که چگونه بااستفاده از Gemini 3.8 Flash TTS
(gemini-3.8-flash-tts) و
Gemini 3.8 Flash-Lite TTS
(gemini-3.8-flash-lite-tts) از نوشتار، صدای تکگوینده و چندگوینده تولید کنید.
قبلاز شروع
مطمئن شوید که از مدل Gemini TTS فهرستشده در بخش
مدلهای پشتیبانیشده استفاده میکنید،
و به جدیدترین Google GenAI SDK (google-genai >= 2.25.0 برای Python
یا @google/genai >= 2.24.0 برای JavaScript/TypeScript) ارتقا دهید یا از REST API استفاده کنید.
برای نتایج بهینه،
زمان استفاده از هر مدل
را مرور کنید تا بهترین مدل را برای حجم کاری خود انتخاب کنید.
شاید برایتان مفید باشد که مدلهای Gemini TTS را در AI Studio آزمایش کنید قبلاز اینکه ساختن را شروع کنید.
نوشتار به گفتار تکگوینده
برای تبدیل نوشتار به صدای تکگوینده با مدلهای Gemini 3.8 TTS،
ترانویسی کلمهبهکلمه را در input ارسال کنید، سبک سطح نوبت را بااستفاده از
حاشیهنویسی speech_metadata پیوست کنید، و صدایتان را در
generation_config.speech_config پیکربندی کنید. میتوانید صدایی را از
گزینههای صدا پیشساخته، «کتابخانه صدای گسترده» (GET /v1beta/voices)، شناسه
طراحی صدای سفارشی (voice_...)، یا شناسه
تکثیر صدا (voice_...، یا
voicekey_... اختیاری بدون حالت) انتخاب کنید.
این مثال صدای خروجی WAV پیشفرض (audio/wav) را از مدل مستقیماً در فایلی ذخیره میکند:
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": "Have a wonderful day!",
"annotations": [{
"type": "speech_metadata",
"style": "cheerful and friendly",
}],
}],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"voice": "Kore"},
]
},
)
with open("out.wav", "wb") as f:
f.write(base64.b64decode(interaction.output_audio.data))
JavaScript
import * as fs from 'node:fs';
import {GoogleGenAI} from '@google/genai';
async function main() {
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-3.8-flash-tts',
input: [{
type: 'user_input',
content: [{
type: 'text',
text: 'Have a wonderful day!',
annotations: [{
type: 'speech_metadata',
style: 'cheerful and friendly',
}],
}],
}],
response_format: { type: 'audio' },
generation_config: {
speech_config: [
{ voice: 'Kore' },
],
},
});
const audioBuffer = Buffer.from(interaction.output_audio.data, 'base64');
fs.writeFileSync('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.8-flash-tts",
"input": [{
"type": "user_input",
"content": [{
"type": "text",
"text": "Have a wonderful day!",
"annotations": [{
"type": "speech_metadata",
"style": "cheerful and friendly"
}]
}]
}],
"response_format": {
"type": "audio"
},
"generation_config": {
"speech_config": [
{ "voice": "Kore" }
]
}
}' | jq -r '[.steps[] | select(.type=="model_output") | .content[] | select(.type=="audio")] | last | .data' | base64 --decode > out.wav
در کیتهای توسعه نرمافزار Python و JavaScript، میتوانید دادههای صوتی تولیدشده را بااستفاده از
دارایی راحتی interaction.output_audio بازیابی کنید، که آخرین بلوک صوتی تولیدشده را برمیگرداند (در پاسخهای خام REST JSON، صدای کدبندیشده با base64 در steps[].content[].data ذخیره میشود). برای جزئیات بیشتر درباره داراییهای راحتی،
نمای کلی تعاملات را ببینید.
نوشتار به گفتار چندبلندگویی
برای دیالوگ چند بلندگو، دو بلندگو را در speech_config.speakers
پیکربندی کنید و هر نوبت را بهعنوان یک عنصر نوشتاری جداگانه با یک حاشیه speech_metadata
که speaker و style اختیاری در سطح نوبت را مشخص میکند بگذرانید. توجه داشته باشید که
speech_config برای تولید تکبلندگو یک آرایه ([{"voice": "..."}])
و برای تولید چندبلندگو یک شیء ({"speakers": [...]}) میپذیرد:
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": "How's it going today Jane?",
"annotations": [{
"type": "speech_metadata",
"speaker": "Joe",
"style": "cheerful and friendly",
}],
},
{
"type": "text",
"text": "Not too bad, how about you? Ready to test these new voices?",
"annotations": [{
"type": "speech_metadata",
"speaker": "Jane",
"style": "calm and relaxed",
}],
},
],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": {
"speakers": [
{"speaker": "Joe", "voice": "Puck"},
{"speaker": "Jane", "voice": "Kore"},
],
}
},
)
with open("out.wav", "wb") as f:
f.write(base64.b64decode(interaction.output_audio.data))
JavaScript
import * as fs from 'node:fs';
import {GoogleGenAI} from '@google/genai';
async function main() {
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-3.8-flash-tts',
input: [{
type: 'user_input',
content: [
{
type: 'text',
text: "How's it going today Jane?",
annotations: [{
type: 'speech_metadata',
speaker: 'Joe',
style: 'cheerful and friendly',
}],
},
{
type: 'text',
text: 'Not too bad, how about you? Ready to test these new voices?',
annotations: [{
type: 'speech_metadata',
speaker: 'Jane',
style: 'calm and relaxed',
}],
},
],
}],
response_format: { type: 'audio' },
generation_config: {
speech_config: {
speakers: [
{ speaker: 'Joe', voice: 'Puck' },
{ speaker: 'Jane', voice: 'Kore' },
],
},
},
});
const audioBuffer = Buffer.from(interaction.output_audio.data, 'base64');
fs.writeFileSync('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.8-flash-tts",
"input": [{
"type": "user_input",
"content": [
{
"type": "text",
"text": "How'\''s it going today Jane?",
"annotations": [{
"type": "speech_metadata",
"speaker": "Joe",
"style": "cheerful and friendly"
}]
},
{
"type": "text",
"text": "Not too bad, how about you? Ready to test these new voices?",
"annotations": [{
"type": "speech_metadata",
"speaker": "Jane",
"style": "calm and relaxed"
}]
}
]
}],
"response_format": {
"type": "audio"
},
"generation_config": {
"speech_config": {
"mode": "conversational",
"speakers": [
{ "speaker": "Joe", "voice": "Puck" },
{ "speaker": "Jane", "voice": "Kore" }
]
}
}
}'
کنترل سبک گفتار با فراداده و برچسبها
Gemini 3.8 TTS فیلد text را دقیقاً بهعنوان ترانویسی کلمهبهکلمه درنظر میگیرد. برای
کنترل کردن ارائه بدون اینکه دستورالعملهای صحنه بلند خوانده شود، دستورالعملهایتان را
براساس دامنه تقسیم کنید:
- ارائه پایدار در سطح نوبت (
speech_metadata.style): احساسات، سبک ارائه، عروض، سرعت، و میزان صدایی را که در کل نوبت اعمال میشود در فیلدstyleقرار دهید (برای مثال،"style": "whispered urgently"،"style": "out of breath"، یا"style": "warm and enthusiastic"). - رویدادهای نقطهای (برچسبهای درونخطی): وقفهها یا فورانهای صوتی غیرگفتاری لحظهای را بااستفاده از پرانتزهای زاویهدار (مثلاً
"Wait... <short pause> did you hear that? <sigh>"یا"Excuse me <cough> as I was saying...") مستقیماً در ترانویسی قرار دهید.
برای آشنایی با روالهای مطلوب جامع، راهنمای پیاموارهنویسی را ببینید.
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": "Wait... <short pause> look under that fallen log! Is that a blue-spotted salamander?",
"annotations": [{
"type": "speech_metadata",
"speaker": "Dr. Anya",
"style": "whispered urgently",
}],
},
{
"type": "text",
"text": "<gasp> No way! <laugh> We've been searching for this species all season!",
"annotations": [{
"type": "speech_metadata",
"speaker": "Liam",
"style": "warm and enthusiastic",
}],
},
],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": {
"speakers": [
{"speaker": "Dr. Anya", "voice": "Kore"},
{"speaker": "Liam", "voice": "Puck"},
],
}
},
)
with open("out.wav", "wb") as f:
f.write(base64.b64decode(interaction.output_audio.data))
JavaScript
import * as fs from 'node:fs';
import {GoogleGenAI} from '@google/genai';
async function main() {
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-3.8-flash-tts',
input: [{
type: 'user_input',
content: [
{
type: 'text',
text: 'Wait... <short pause> look under that fallen log! Is that a blue-spotted salamander?',
annotations: [{
type: 'speech_metadata',
speaker: 'Dr. Anya',
style: 'whispered urgently',
}],
},
{
type: 'text',
text: "<gasp> No way! <laugh> We've been searching for this species all season!",
annotations: [{
type: 'speech_metadata',
speaker: 'Liam',
style: 'warm and enthusiastic',
}],
},
],
}],
response_format: { type: 'audio' },
generation_config: {
speech_config: {
speakers: [
{ speaker: 'Dr. Anya', voice: 'Kore' },
{ speaker: 'Liam', voice: 'Puck' },
],
},
},
});
if (interaction.output_audio?.data) {
const audioBuffer = Buffer.from(interaction.output_audio.data, 'base64');
fs.writeFileSync('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.8-flash-tts",
"input": [{
"type": "user_input",
"content": [
{
"type": "text",
"text": "Wait... <short pause> look under that fallen log! Is that a blue-spotted salamander?",
"annotations": [{
"type": "speech_metadata",
"speaker": "Dr. Anya",
"style": "whispered urgently"
}]
},
{
"type": "text",
"text": "<gasp> No way! <laugh> We'\''ve been searching for this species all season!",
"annotations": [{
"type": "speech_metadata",
"speaker": "Liam",
"style": "warm and enthusiastic"
}]
}
]
}],
"response_format": {
"type": "audio"
},
"generation_config": {
"speech_config": {
"speakers": [
{ "speaker": "Dr. Anya", "voice": "Kore" },
{ "speaker": "Liam", "voice": "Puck" }
]
}
}
}'
تولید گفتار جاریسازی
میتوانید صدای تولیدشده را همانطور که درحال ترکیب شدن است با تنظیم
stream: true جاریسازی کنید. برخلاف درخواستهای تکمقداری (که فایل WAV کامل با سرصفحه RIFF برمیگردانند)، درخواستهای جاریسازی بهطور پیشفرض تکههای PCM خطی لیتل اندین علامتدار ۱۶ بیتی خام بدون سرصفحه (audio/l16، ۲۴ کیلوهرتز، مونو) برمیگردانند تا تکههای صوتی بتوانند بهطور پیوسته بدون سرصفحه محفظه پخش یا بههم متصل شوند.
Python
import base64
from google import genai
client = genai.Client()
stream = client.interactions.create(
model="gemini-3.8-flash-tts",
input=[{
"type": "user_input",
"content": [{
"type": "text",
"text": "Have a wonderful day!",
"annotations": [{
"type": "speech_metadata",
"style": "cheerful and friendly",
}],
}],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"voice": "Kore"},
]
},
stream=True,
)
for event in stream:
if event.event_type == "step.delta":
if event.delta.type == "audio":
audio_data = base64.b64decode(event.delta.data)
# Process the audio chunk (e.g. play it or write to a file)
JavaScript
import {GoogleGenAI} from '@google/genai';
async function main() {
const client = new GoogleGenAI({});
const stream = await client.interactions.create({
model: 'gemini-3.8-flash-tts',
input: [{
type: 'user_input',
content: [{
type: 'text',
text: 'Have a wonderful day!',
annotations: [{
type: 'speech_metadata',
style: 'cheerful and friendly',
}],
}],
}],
response_format: { type: 'audio' },
generation_config: {
speech_config: [
{ voice: 'Kore' },
],
},
stream: true,
});
for await (const event of stream) {
if (event.event_type === 'step.delta') {
if (event.delta.type === 'audio') {
const audioBuffer = Buffer.from(event.delta.data, 'base64');
// Process the audio buffer
}
}
}
}
await main();
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
--no-buffer \
-d '{
"model": "gemini-3.8-flash-tts",
"input": [{
"type": "user_input",
"content": [{
"type": "text",
"text": "Have a wonderful day!",
"annotations": [{
"type": "speech_metadata",
"style": "cheerful and friendly"
}]
}]
}],
"response_format": {
"type": "audio"
},
"generation_config": {
"speech_config": [
{ "voice": "Kore" }
]
},
"stream": true
}'
قالبهای خروجی صوتی
مدلهای Gemini 3.8 TTS از قالبهای صوتی پیشفرض متفاوتی استفاده میکنند، بسته به اینکه درخواست تکموردی یا جاریسازی باشد:
- درخواستهای یکتایی (
stream=False): صدای کامل WAV (audio/wav) را با سرصفحه استاندارد RIFF (۲۴ کیلوهرتز، تککاناله، ۱۶ بیت علامتدار کوچکسر PCM) برمیگرداند. میتوانید بایتهای صوتی رمزگشاییشده را مستقیماً در فایل.wavذخیره کنید بدون اینکه سرصفحه WAV را بهصورت دستی به آن اضافه کنید. - درخواستهای جاریسازی (
stream=True): بهطور پیشفرض، بخشهای PCM خطی خام بدون سرصفحه (audio/l16) (۲۴ کیلوهرتز، مونو، PCM با ترتیب بایت کوچک علامتدار ۱۶ بیتی) را برمیگرداند تا بخشها بتوانند بهطور مداوم بدون سرصفحه محفظه در هر بخش جاریسازی یا بههم متصل شوند.
برای درخواست کدبندی صوتی یا نرخ نمونه متفاوت، mime_type و
اختیاری sample_rate را در response_format پیکربندی کنید:
| قالب | بهارزش mime_type |
شرح |
|---|---|---|
| WAV (unary default) | "audio/wav" |
فایل WAV فشردهنشده با سرایند RIFF (PCM با ترتیب بایت کوچک ۱۶ بیتی علامتدار، تککاناله، پیشفرض ۲۴ کیلوهرتز). پیشفرض برای درخواستهای یکتایی. |
| Raw PCM (L16) (پیشفرض جاریسازی) | "audio/l16" |
صدای PCM خطی 16 بیتی بدون سرصفحه و فشردهنشده (24 کیلوهرتز، مونو). پیشفرض برای درخواستهای جاریسازی. |
| Mu-law | "audio/mulaw" |
صدای کدبندیشده ۸ بیتی G.711 mu-law (معمولاً در سیستمهای تلفنی/IVR در آمریکای شمالی و ژاپن استفاده میشود). |
| A-law | "audio/alaw" |
صدای کدگذاریشده ۸ بیتی G.711 A-law (که معمولاً در سیستمهای تلفنی اروپایی و بینالمللی استفاده میشود). |
همچنین میتوانید sample_rate را به هرتز مشخص کنید (برای مثال، 24000، 16000، یا
8000).
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": "Have a wonderful day!",
"annotations": [{
"type": "speech_metadata",
"style": "cheerful and friendly",
}],
}],
}],
response_format={
"type": "audio",
"mime_type": "audio/l16", # "audio/wav" (default), "audio/l16", "audio/mulaw", or "audio/alaw"
"sample_rate": 24000,
},
generation_config={
"speech_config": [
{"voice": "Kore"},
]
},
)
with open("out.pcm", "wb") as f:
f.write(base64.b64decode(interaction.output_audio.data))
JavaScript
import * as fs from 'node:fs';
import {GoogleGenAI} from '@google/genai';
async function main() {
const client = new GoogleGenAI({});
const interaction = await client.interactions.create({
model: 'gemini-3.8-flash-tts',
input: [{
type: 'user_input',
content: [{
type: 'text',
text: 'Have a wonderful day!',
annotations: [{
type: 'speech_metadata',
style: 'cheerful and friendly',
}],
}],
}],
response_format: {
type: 'audio',
mime_type: 'audio/l16', // 'audio/wav' (default), 'audio/l16', 'audio/mulaw', or 'audio/alaw'
sample_rate: 24000,
},
generation_config: {
speech_config: [
{ voice: 'Kore' },
],
},
});
const audioBuffer = Buffer.from(interaction.output_audio.data, 'base64');
fs.writeFileSync('out.pcm', 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.8-flash-tts",
"input": [{
"type": "user_input",
"content": [{
"type": "text",
"text": "Have a wonderful day!",
"annotations": [{
"type": "speech_metadata",
"style": "cheerful and friendly"
}]
}]
}],
"response_format": {
"type": "audio",
"mime_type": "audio/l16",
"sample_rate": 24000
},
"generation_config": {
"speech_config": [
{ "voice": "Kore" }
]
}
}'
گزینههای گفتاری
Gemini 3.8 TTS از چهار روش برای انتخاب یا ایجاد صدا پشتیبانی میکند:
- صداهای استودیویی ازپیش ساختهشده: ۳۰ صدای گلچینشده که در جدول زیر فهرست شدهاند.
- کتابخانه صوتی گسترده: صدها صدای اضافی در زبانها،
لهجهها، و کهنالگوهای شخصیتی مختلف که بااستفاده از
client.voices.list()(GET /v1beta/voices) دردسترس است. - طراحی صدا: تولید یک شخصیت صوتی سفارشی از شرح زبان طبیعی در Google AI Studio یا بااستفاده از
POST /v1beta/voices(type="prompted"، که یک شناسهvoice_...پایدار و یک پیشنمایش WAVsample_audioدرCreateVoiceوGetVoiceبرمیگرداند). - همانندسازی صدا: صدای گوینده را از صدای مرجع و رضایت در Google AI Studio یا بااستفاده از
POST /v1beta/voices(type="replicated"،store=Trueپایدار بهطور پیشفرض یاstore=Falseبدون حالت اختیاری) همانندسازی کنید.
محدودیتهای صدای سفارشی و TTL
| تایپ گفتاری | حالت فضای ذخیرهسازی | سهمیه / محدودیت | نگهداری (TTL) |
|---|---|---|---|
صداهای حالتدار (voice_...، درخواستشده یا تکثیرشده) |
store=True |
۲۰۰ صدا برای هر پروژه (بین صداهای پیاموارهای و صداهای بازآفرینیشده همرسانی میشود) | ۱ سال از آخرین استفاده* |
کلیدهای صوتی بیوضعیت (voicekey_...، تکرارشده) |
store=False |
تحتمدیریت کارخواه | ۷ روز |
* تمدید TTL: هر بار که از صدا بهطور فعال استفاده میشود (چه با ترکیب گفتار با صدا یا استفاده از آن بهعنوان صدای پایه برای بازآمیزی)، پنجره نگهداری ۱ ساله بازنشانی میشود. صداهایی که بهمدت ۱ سال فعالیتی نداشته باشند بهطور خودکار حذف میشوند.
صداهای پیشساخته
| Zephyr -- روشن | Puck -- شاد | Charon -- اطلاعاتی |
| Kore -- Firm | Fenrir -- Excitable | Leda -- جوان |
| Orus -- Firm | Aoede -- Breezy | Callirrhoe -- آسانگیر |
| Autonoe -- روشن | Enceladus -- Breathy | Iapetus -- Clear (صاف) |
| Umbriel -- آسانگیر | Algieba -- ملایم | Despina -- نرم |
| Erinome -- Clear | Algenib -- Gravelly | Rasalgethi -- آموزنده |
| Laomedeia -- Upbeat | Achernar -- ملایم | Alnilam -- Firm |
| Schedar -- Even | Gacrux -- Mature | Pulcherrima -- جلو بردن |
| Achird -- دوستانه | Zubenelgenubi -- Casual | Vindemiatrix -- Gentle |
| سعدالخبایا -- سرزنده | Sadaltager -- آگاه | Sulafat -- گرم |
«کتابخانه صدای گسترده» و فیلتر کردن
علاوهبر ۳۰ صدای استودیویی ویژه در جدول بالا، کتابخانه گسترده صدا صدها صدای دیگر را در زبانها، لهجههای منطقهای، شخصیتهای کاراکتر، و دامنههای مختلف ارائه میدهد. میتوانید بهصورت تعاملی در Google AI Studio کل «کتابخانه صدا» را مرور، فیلتر، و امتحان کنید یا بااستفاده از client.voices.list() (GET /v1beta/voices، بااستفاده از google-genai نسخه ۲.۲۵.۰ به بالا / @google/genai نسخه ۲.۲۴.۰ به بالا) آن را بهصورت برنامهنویسیشده پُرسمان کنید.
ListVoices صداهای ذخیرهشده سفارشی شما را (بهترتیب از جدیدترین) و سپس صداهای کاتالوگ ازپیشساختهشدهای را که با معیارهای فیلتر شما مطابقت دارند برمیگرداند. وقتی چند مقدار
برای فیلتر فهرست ارسال میشود، صداهای منطبق با هر مقداری در آن فیلتر
برگردانده میشود (OR)، درحالیکه پارامترهای فیلتر متمایز با AND ترکیب میشوند:
| پارامتر | نوع | شرح |
|---|---|---|
language_code |
list[str] |
برچسب(های) زبان BCP-47 (برای مثال، ["en-US", "en-GB"]). مطابقت دقیق غیرحساس به حروف بزرگ و کوچک. |
region_code |
list[str] |
کد(های) منطقه ISO 3166-1 alpha-2 یا UN M.49 (برای مثال، ["US", "GB"]). |
accent |
list[str] |
توصیفگر(های) لهجه منطقهای (برای مثال، ["American", "British"]). |
gender |
list[str] |
ارائه جنسیت درکشده ("female"، "male"، یا "neutral"). |
pitch |
list[str] |
طبقهبندی زیروبم صدا ("low"، "medium"، یا "high"). |
persona |
list[str] |
شخصیت صوتی یا کهنالگوی شخصیت (برای مثال، ["Warm, Friendly"]، ["Narrator"]). |
contexts (context در REST) |
list[str] |
دامنه استفاده بهینه (برای مثال، ["Audiobook", "Conversational", "News"]). |
type (type_ در Python) |
list[str] |
فیلتر کردن براساس منبع صدا: "prebuilt"، "prompted" (طراحی صدا)، یا "replicated" (همانندسازی صدا). |
search |
str |
جستجوی رشته فرعی نوشتار آزاد بدون حساسیت به حروف بزرگ و کوچک با display_name و description مطابقت دارد. |
page_size |
int |
حداکثر تعداد صداهای برگشتی در هر صفحه (پیشفرض 50، حداکثر 1000). |
page_token |
str |
نشان از response.next_page_token برای واکشی صفحه بعدی نتایج. |
Python
from google import genai
client = genai.Client()
# Filter the Voice Library by language, gender, pitch, domain context, and keyword
response = client.voices.list(
language_code=["en-US", "en-GB"],
gender=["female"],
pitch=["medium", "low"],
contexts=["Audiobook", "Conversational"],
type_=["prebuilt"],
search="warm",
page_size=50,
)
for voice in response.voices or []:
print(
f"{voice.id} | {voice.display_name} ({voice.language_code},"
f" {voice.accent}, {voice.gender}, pitch={voice.pitch}):"
f" {voice.description}"
)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
// Filter the Voice Library by language, gender, pitch, domain context, and keyword
const response = await ai.voices.list({
language_code: ["en-US", "en-GB"],
gender: ["female"],
pitch: ["medium", "low"],
contexts: ["Audiobook", "Conversational"],
type: ["prebuilt"],
search: "warm",
page_size: 50,
});
for (const voice of response.voices ?? []) {
console.log(
`${voice.id} | ${voice.display_name} (${voice.language_code}, ${voice.accent}, ${voice.gender}, pitch=${voice.pitch}): ${voice.description}`
);
}
استراحت
curl -G "https://generativelanguage.googleapis.com/v1beta/voices" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
--data-urlencode "language_code=en-US" \
--data-urlencode "language_code=en-GB" \
--data-urlencode "gender=female" \
--data-urlencode "pitch=medium" \
--data-urlencode "context=Audiobook" \
--data-urlencode "type=prebuilt" \
--data-urlencode "search=warm" \
--data-urlencode "page_size=50"
زبانهای پشتیبانیشده
مدلهای تبدیل نوشتار به گفتار زبان ورودی را بهطور خودکار تشخیص میدهند.
Gemini 3.8 Flash TTS
(gemini-3.8-flash-tts) از بیشاز ۱۳۰ زبان پشتیبانی میکند، و
Gemini 3.8 Flash-Lite TTS
(gemini-3.8-flash-lite-tts) از بیشاز ۱۰۰ زبان پشتیبانی میکند:
| زبان | Gemini 3.8 Flash TTS | Gemini 3.8 Flash-Lite TTS |
|---|---|---|
| آچهای (خط عربی) | ✔️ | ✔️ |
| آفریکانس | ✔️ | ✔️ |
| آکان | ✔️ | ✔️ |
| آمهاریک | ✔️ | ✔️ |
| ارمنی | ✔️ | ✔️ |
| آسامی | ✔️ | ✔️ |
| اودهی | ✔️ | ✔️ |
| بالیایی | ✔️ | ✔️ |
| بنگالی | ✔️ | ✔️ |
| بنجری (الفبای عربی) | ✔️ | — |
| بَنجَری (خط لاتین) | ✔️ | ✔️ |
| باشقیری | ✔️ | — |
| باسک | ✔️ | ✔️ |
| Belarusian | ✔️ | ✔️ |
| بمبا | ✔️ | — |
| بوجپوری | ✔️ | ✔️ |
| بوسنیایی | ✔️ | ✔️ |
| بوگیایی | ✔️ | ✔️ |
| بلغاری | ✔️ | ✔️ |
| برمهای | ✔️ | — |
| کانتونی | ✔️ | ✔️ |
| کاتالان | ✔️ | ✔️ |
| سبوانو | ✔️ | ✔️ |
| کردی میانی | ✔️ | ✔️ |
| چتیسگری | ✔️ | ✔️ |
| چینی (نویسه هان سادهشده) | ✔️ | ✔️ |
| چینی (خط هانت) | ✔️ | ✔️ |
| تاتاری کریمه | ✔️ | — |
| کرواتی | ✔️ | ✔️ |
| چک | ✔️ | ✔️ |
| دانمارکی | ✔️ | ✔️ |
| هلندی | ✔️ | ✔️ |
| دیولا | ✔️ | — |
| دزونگخا | ✔️ | — |
| عربی مصری | ✔️ | ✔️ |
| انگلیسی | ✔️ | ✔️ |
| استونیایی | ✔️ | ✔️ |
| فیلیپینی | ✔️ | ✔️ |
| فنلاندی | ✔️ | — |
| فرانسوی | ✔️ | ✔️ |
| گالیسی | ✔️ | ✔️ |
| گاندا | ✔️ | ✔️ |
| گرجستانی | ✔️ | ✔️ |
| آلمانی | ✔️ | ✔️ |
| یونانی | ✔️ | ✔️ |
| گورانی | ✔️ | — |
| گجراتی | ✔️ | ✔️ |
| کریول هائیتی | ✔️ | ✔️ |
| مغولی خالخا | ✔️ | ✔️ |
| هوسایی | ✔️ | ✔️ |
| عبری | ✔️ | ✔️ |
| هندی | ✔️ | ✔️ |
| مجارستانی | ✔️ | ✔️ |
| ایسلندی | ✔️ | ✔️ |
| ایگبو | ✔️ | — |
| ایلوکو | ✔️ | ✔️ |
| اندونزیایی | ✔️ | ✔️ |
| فارسی ایرانی | ✔️ | ✔️ |
| ایتالیایی | ✔️ | ✔️ |
| ژاپنی | ✔️ | ✔️ |
| جاوهای | ✔️ | ✔️ |
| کابیل | ✔️ | — |
| کامبا | ✔️ | ✔️ |
| کنادا | ✔️ | ✔️ |
| کشمیری (خط عربی) | ✔️ | ✔️ |
| کشمیری (خط دیواناگری) | ✔️ | ✔️ |
| قزاقی | ✔️ | ✔️ |
| خمر | ✔️ | ✔️ |
| کیکویو | ✔️ | ✔️ |
| کینیارواندایی | ✔️ | ✔️ |
| کنگو | ✔️ | ✔️ |
| کرهای | ✔️ | ✔️ |
| قرقیزی | ✔️ | ✔️ |
| لائوسی | ✔️ | ✔️ |
| لاتگالی | ✔️ | — |
| لینگالا | ✔️ | ✔️ |
| لیتوانیایی | ✔️ | — |
| لوگزامبورگی | ✔️ | — |
| مقدونی | ✔️ | ✔️ |
| ماگهی | ✔️ | ✔️ |
| مایتهیلی | ✔️ | ✔️ |
| مالایالام | ✔️ | ✔️ |
| مالتی | ✔️ | ✔️ |
| مانیپوری | ✔️ | ✔️ |
| ماراتی | ✔️ | ✔️ |
| مینانگکابو (الفبای عربی) | ✔️ | ✔️ |
| مینانگکابائو (الفبای لاتین) | ✔️ | — |
| میزو | ✔️ | ✔️ |
| نپالی (زبان فردی) | ✔️ | ✔️ |
| فولانی نیجریه | ✔️ | ✔️ |
| آذربایجانی شمالی | ✔️ | ✔️ |
| سوتوی شمالی | ✔️ | ✔️ |
| ازبکی شمالی | ✔️ | ✔️ |
| بوکسمال نروژی | ✔️ | ✔️ |
| نروژی (نینورسک) | ✔️ | ✔️ |
| نیانجا | ✔️ | ✔️ |
| اوسیتان | ✔️ | — |
| اودیا (زبان فردی) | ✔️ | ✔️ |
| پانگاسینانی | ✔️ | — |
| فارسی (افغانستان) | ✔️ | ✔️ |
| لهستانی | ✔️ | ✔️ |
| پرتغالی | ✔️ | ✔️ |
| پنجابی | ✔️ | ✔️ |
| رومانیایی | ✔️ | ✔️ |
| روسی | ✔️ | ✔️ |
| سنتالی | ✔️ | ✔️ |
| صربی | ✔️ | ✔️ |
| سیندهی | ✔️ | — |
| سینهالی | ✔️ | ✔️ |
| اسلوواک | ✔️ | ✔️ |
| Slovenian | ✔️ | — |
| سومالی | ✔️ | — |
| آذربایجانی جنوبی | ✔️ | ✔️ |
| پشتوی جنوبی | ✔️ | ✔️ |
| سوتویی جنوبی | ✔️ | — |
| اسپانیایی | ✔️ | ✔️ |
| عربی معیار (الفبای عربی) | ✔️ | ✔️ |
| عربی معیار (الفبای لاتین) | ✔️ | ✔️ |
| لتونیایی استاندارد | ✔️ | ✔️ |
| مالایی استاندارد | ✔️ | ✔️ |
| سواحیلی (زبان فردی) | ✔️ | — |
| سواتی | ✔️ | — |
| سوئدی | ✔️ | — |
| تاجیکی | ✔️ | — |
| تامیل | ✔️ | ✔️ |
| تلوگو | ✔️ | ✔️ |
| تایلندی | ✔️ | — |
| تیگرینیا | ✔️ | — |
| توسک آلبانیایی | ✔️ | — |
| ترکی | ✔️ | ✔️ |
| اویغوری | ✔️ | — |
| ویتنامی | ✔️ | ✔️ |
مدلهای پشتیبانیشده
| مدل | تک گوینده | چندبلندگویی | طراحی صدا | همانندسازی صدا |
|---|---|---|---|---|
Gemini 3.8 Flash TTS (gemini-3.8-flash-tts) |
✔️ | ✔️ | ✔️ | ✔️ |
Gemini 3.8 Flash-Lite TTS (gemini-3.8-flash-lite-tts) |
✔️ | ✔️ | ✔️ | ✔️ |
| Gemini 3.1 Flash TTS Preview | ✔️ | ✔️ | — | — |
| پیشنمایش Gemini 2.5 Pro TTS | ✔️ | ✔️ | — | — |
چه زمانی از کدام مدل استفاده کنیم
هر دو مدل Gemini 3.8 TTS از طرحواره ایپیآی و قالب پیامواره کاملاً یکسانی استفاده میکنند، که به شما امکان میدهد با تغییر یک پارامتر بین آنها جابهجا شوید:
- از Gemini 3.8 Flash TTS
(
gemini-3.8-flash-tts) زمانی استفاده کنید که حداکثر وفاداری صوتی، بازیگری ظریف، و کنترل بیانی در اولویت باشد. این مدل برای کارهای خلاقانه در سطح استودیو، مکالمههای پیچیده با چند گوینده، برچسبهای سنگین فوران صوتی، تلفظهای دشوار، گویشهای منطقهای یا اقلیت، و روایتهای طولانی که به صدای بسیار پایدار و ثبات صدای محیط نیاز دارند ایدهآل است. - از Gemini 3.8 Flash-Lite TTS
(
gemini-3.8-flash-lite-tts) بهعنوان جایگزین سریع و مقرونبهصرفه برایgemini-3.1-flash-tts-previewاستفاده کنید. این مدل برای تولید انبوه با حجم بالا، آبشارهای عامل صوتی مکالمهای، ویژگیهای بلندخوانی، تکثیر صدای قابلاعتماد، و گفتار تکبلندگوی روزمره در زبانهای اصلی بهینهسازی شده است.
راهنمای انتقال
اگر از gemini-3.1-flash-tts-preview یا مدلهای قدیمیتر Gemini TTS به Gemini 3.8 TTS مهاجرت میکنید:
- انتقال دستورالعملهای سطح گردش به
speech_metadata: «نوشتار به گفتار Gemini 3.8» با نوشتار ورودی دقیقاً مثل یک آوانویسی کلمهبهکلمه رفتار میکند. دستورالعملهای تحویل پایدار (style—مانند"whispering"،"out of breath"، یا"speaking slowly") و برچسبهای گوینده (speaker) را بهجای جاسازی دستورالعملهای صحنه در متن ترانویسی، به حاشیهنویسیهای ساختاریافتهspeech_metadataمنتقل کنید. - از برچسبهای درونخطی براکت زاویهدار فقط برای رویدادهای صوتی نقطهای استفاده کنید:
آواسازیهای غیرگفتاری و مکثهای لحظهای را بااستفاده از براکتهای زاویهدار (مانند
<laugh>،<sigh>،<cough>،<breath>، یا<short pause>) بهصورت درونخطی در ترانویسی نگه دارید. از برچسبهای جلوه صوتی (مانند تشویق یا صدای ضربه) اجتناب کنید و سبکهای ارائه را درspeech_metadata.styleقرار دهید. - در هر نوبت در درخواستهای چند بلندگو،
speakerرا مشخص کنید: هر نوبت در درخواست چند بلندگو باید بهطور صریح شاملspeakerدرspeech_metadataباشد که با یکی از بلندگوهای پیکربندیشده مطابقت داشته باشد. - طراحی شخصیتها از ابتدا با «طراحی صدا»: بلوکهای چندپاراگرافی
"Audio Profile"یا"Director's Notes"را با صدای سفارشی ایجادشده در طراحی صدا جایگزین کنید، سپس آن شناسهvoice_...را ازطریق درخواستهای «نوشتار به گفتار» با حداقل رشتههایstyleیا رشتههای خالی منتقل کنید. - حساب برای برونداد پیشفرض WAV (
audio/wav) در درخواستهای یکتایی: برخلافgemini-3.1-flash-tts-previewو مدلهای قدیمیتر «نوشتار به گفتار» (که بهطور پیشفرض PCM خام بدون سرایندaudio/l16برمیگرداندند)، «نوشتار به گفتار Gemini 3.8» بهطور پیشفرض برای درخواستهای یکتایی صدای WAV (audio/wav) با سرایند استاندارد RIFF برمیگرداند.- اگر کد شما قبلاً بایتهای PCM خام را در سرصفحه WAV میپیچید (برای مثال، بااستفاده از واحد
waveیاffmpegدر Python)، بستهبندی سرصفحه دستی را بردارید و بایتهای برگشتی را مستقیماً در فایل.wavبنویسید. - اگر خط لوله شما به صدای PCM خام بدون سرصفحه، mu-law، یا A-law نیاز دارد،
response_format.mime_typeرا صریحاً روی"audio/l16"،"audio/mulaw"، یا"audio/alaw"تنظیم کنید (برای مثال،{"response_format": {"type": "audio", "mime_type": "audio/l16"}}در Interactions API، یاAUDIO_L16درgenerateContent). به قالبهای خروجی صوتی مراجعه کنید.
- اگر کد شما قبلاً بایتهای PCM خام را در سرصفحه WAV میپیچید (برای مثال، بااستفاده از واحد
راهنمای پیاموارهها
مدلهای TTS Gemini 3.8 با نوشتار ورودی دقیقاً بهعنوان ترانویسی کلمهبهکلمه رفتار میکنند.
برخلاف مدلهای پیشنمایش قبلی که دستورات صحنه در نوشتار ساده جاسازی میشدند،
Gemini 3.8 TTS دستورات سطح نوبت پایدار (speech_metadata) را
از برچسبهای صوتی درونخطی نقطهای جدا میکند.
فیلد سبک درمقابل برچسبهای بهخط
دستورالعملهای عملکرد را براساس دامنه تقسیم کنید:
- ارائه در سطح نوبت (
speech_metadata.style): مشخصههای ارائه پایدار (مانند احساس، عروض، سرعت کلی، یا سبک ارائه (مانند"whispering"،"out of breath"،"muttering"، یا"sarcastic")) را در فیلدstyleازspeech_metadataقرار دهید. برای ایجاد شخصیت و عملکردی پایدار درطول نوبتها، ابتدا شخصیت را در طراحی صدا طراحی کنید و ازstyleفقط برای تغییرات جزئی اختیاری در سطح نوبت استفاده کنید. - رویدادهای نقطهای (برچسبهای درونخطی): صداهای غیرگفتاری لحظهای، نفس کشیدن، یا مکثها را بااستفاده از پرانتزهای زاویهدار (
<cough>،<breath>،<sigh>،<short pause>) بهصورت درونخطی در ترانویسی قرار دهید. برای بالاترین کیفیت صدا، از پرانتزهای زاویهدار (<...>) استفاده کنید و بهجای جلوههای صوتی غیرکلامی، از صداهای کلامی انسانی استفاده کنید.
| حوزه | کجا قرار دهید | مثالها |
|---|---|---|
| سطح نوبت (درطول نوبت حفظ میشود) | speech_metadata.style |
"angry tone"، "speaking rapidly"، "out of breath"، "whispers"، "sarcastic" |
| نقطه زمانی (در کلمه خاصی رخ میدهد) | درونخطی در text (<...>) |
"<cough> Thank you all for coming tonight! <throat-clearing> As I was saying..." |
سرعت و مکثها
میتوانید ریتم و سکوت را در سه سطح جزئیات کنترل کنید:
- نشانههای سجاوندی و سهنقطه: از ویرگول، خط تیره (
--)، و سهنقطه (...) برای مکثهای طبیعی در مکالمه استفاده کنید. - برچسبهای مکث درونخطی:
<short pause>یا<long pause>را دقیقاً در جاهایی از متن که گوینده باید مکث کند درج کنید:text Hold on, let me think... <short pause> Alright, I've got it. - سرعت در سطح نوبت:
"style": "speaking rapidly"یا"style": "speaking slowly"را درspeech_metadataتنظیم کنید تا نرخ صحبت کردن را در کل نوبت کنترل کنید.
عروض و زیروبمی
از speech_metadata.style برای کنترل آهنگ، زیروبمی، و نواخت در سراسر
یک نوبت استفاده کنید (برای مثال، "style": "high pitch, cheerful and excited inflection" یا
"style": "monotone and flat"). اگر احساس یا آهنگ در میان گفتگو تغییر میکند،
نوشته را به نوبتهای جداگانه با مقادیر style متمایز برای هر نوبت تقسیم کنید.
تأکید
کلمات خاصی را در ترانویسی با حروف بزرگ بنویسید و آنها را با علائم سجاوندی و برچسبهای صوتی درونخطی ترکیب کنید تا تأکید صوتی طبیعی روی کلمات کلیدی قرار گیرد:
This is a VERY important point!
It was a VERY long day <sigh> ... nobody listens anymore.
صداهای غیرگفتاری و انفجارهای صوتی
صداهای غیرگفتاری انسان را بااستفاده از علامتهای بزرگتر و کوچکتر (<...>) در همان جایی که صدا باید شنیده شود، بهصورت درونخطی قرار دهید. برچسبهای صوتی توصیهشده شامل موارد زیر است:
<argh> |
<breath> |
<heavy breath> |
<exhales> |
<cackle> |
<cheer> |
<chuckle> / <chuckles> |
<cough> |
<cry> |
<gasp> |
<giggle> |
<groan> |
<growl> |
<grunt> |
<grr> |
<hiss> |
<laugh> / <laughter> |
<moan> |
<pant> |
<pff> / <phew> |
<scream> |
<shout> |
<shriek> |
<sigh> / <sighs> |
<sneeze> |
<snicker> |
<snort> |
<sob> |
<throat-clearing> |
<tsk> |
<whimper> |
<whispers> / <whispering> |
<yawn> |
<short pause> |
<long pause> |
کانالهای برگشتی و گفتار همپوشان
در گفتگوی چند گوینده، واکنشهای شنونده را در نویسههای لوله
(|reaction|) در نوبت گوینده بپیچید تا کانالهای پشتی طبیعی یا
گفتار همپوشان ایجاد کنید بدون اینکه برای هر واکنش نوبت جداگانهای ایجاد کنید.
- تبادلهای کوتاه کانال پشتیبان: واکنشهای شنونده مختصر لایه (
|oh hmm|،|oh really?|،|absolutely|) را در نوبت سخنران فعال قرار دهید:- نوبت ۱ (گوینده الف):
"So the launch is Thursday |oh hmm| Are we actually ready?" - نوبت ۲ (گوینده ب):
"Ready enough |oh really?| The last blocker cleared this morning." - نوبت ۳ (گوینده A):
"Then let's ship it |absolutely| and watch the dashboards."
- نوبت ۱ (گوینده الف):
- گفتار همپوشان و درهمبافته: از چند بخش خط عمودی برای شبیهسازی گفتار همزمان یا درهمبافته بین دو گوینده استفاده کنید (بهترین عملکرد را با
gemini-3.8-flash-ttsدارد):- شمارش معکوس/همسرایی همزمان:
"Let's surprise him on three |ok| ready?"و سپس"one. two. three. |happy| happy |birthday| birthday!" - همپوشانی کامل بلندگو:
"Hello |oh| there |my| it |goodness| must |gracious| be |would| almost |you| time |look| for |at that| dinner"
- شمارش معکوس/همسرایی همزمان:
هماهنگی در همه موارد تولیدشده و چیزهایی که باید از آنها اجتناب کرد
برای حفظ ثبات هویت صوتی در نوبتهای مختلف، این دستورالعملها را دنبال کنید:
- شخصیتهای طراحی را ازقبل در «طراحی صدا» بهجای بلوکهای سبک طولانی طراحی کنید:
بخشهای
"Audio Profile"طولانی و چند گلوله"Director's Notes"که از مدلهای قبلی منتقل شدهاند، رایجترین دلیل انحراف صدا هستند. از همان شهود خلاقانه در طراحی صدا استفاده کنید تا یک شخصیت سفارشیvoice_...دائمی ایجاد کنید، سپس آن شناسه صدا را در تماسهای نوشتار به گفتار خود بهکار ببرید. - برای پایداری به مرجع صوتی تکیه کنید (دستورالعملهای متا را حذف کنید):
مدلهای Gemini 3.8 TTS آموزش دیدهاند تا ابتدا به مرجع صوتی تکیه کنند.
دستورالعملهایی را که به مدل میگوید صدا را ثابت نگه دارد (مانند
"do not switch speaker identity"یا"maintain identical timbre") اضافه نکنید—نوشتار پیامواره اضافی باعث افزایش انحراف میشود. دستورالعملهای سبک غیرضروری را حذف کنید و اجازه دهید مدل بهطور طبیعی حول نقطه ثابتی که مرجع صوتی ارائه میدهد تغییر کند. - سعی نکنید ویژگیهای تغییرناپذیر گوینده را در
styleتغییر دهید: از قرار دادن سن، جنسیت، نامها، یا تغییرات لهجه دائمی درspeech_metadata.styleخودداری کنید. بهجای آن، صدایی منطقهای از «کتابخانه صدای گسترده» انتخاب کنید یا با طراحی صدا صدایی ایجاد کنید.
گردش کار توصیهشده
- شخصیت را یکبار بسازید: شخصیت خود را در طراحی صدا بسازید یا صدایی منطقهای از «کتابخانه صدای گسترده» که با زبان و شخصیت هدف شما مطابقت دارد انتخاب کنید.
- ترانویسیهای گفتاری طبیعی با ناروانیهای گفتاری بنویسید: برای حداکثر
طبیعی بودن،
textرا بهعنوان ترانویسی گفتاری واقعی بنویسید—ازجمله ناروانیهای گفتاری و تردیدهای مکالمهای طبیعی (برای مثال،"Oh uh yeah I think... hm, so that's interesting"). - ابتدا نوشتار به گفتار ساده را آزمایش کنید: ابتدا ترانویسیتان را با فیلد
styleخالی ترکیب کنید—اکثر درخواستها اصلاً به دستورالعملstyleنیاز ندارند. - فقط برای اصلاحات، پیاموارههای کوتاه
styleاضافه کنید: فقط برای نوبتهایی که نیاز به اصلاح خاصی در ارائه دارند،styleرشتهای (مانند"casual, friendly"یا"muttering, then reassuring") مختصر اضافه کنید، و وقتی میخواهید خط پایه یکسانی داشته باشید، آن رشته کوتاه دقیق را در نوبتهای مختلف استفاده مجدد کنید.
مکالمه چندنوبتی و عاملهای صوتی
هنگام ساختن عاملهای صوتی مکالمهای همزمان یا برنامههای چندنوبتی:
- با رسیدن تکههای نوشتار مدل زبانی بزرگ، یک تماس نوشتار به گفتار در هر نوبت برقرار کنید.
- اجازه دهید
voiceپیکربندیشده (ازپیشساخته، طراحیشدهvoice_...، یا تکرارشدهvoice_.../voicekey_...) هویت گوینده را درطول نوبتها حفظ کند—هرگز یک شخصیت طولانی را در هر نوبت دوباره ارسال نکنید. - فیلد
styleرا برای هر نوبت خالی بگذارید، یا یک رشته ثابت کوتاه (مانند"casual, friendly") برای کل مکالمه ارسال کنید. - پاسخهای طولانی نماینده را بهجای استفاده از پیاموارههای سبک قویتر، به نوبتهای کوتاهتر تقسیم کنید.
محدودیتها
- مدلهای «تبدیل نوشتار به گفتار» فقط ورودیهای نوشتاری را میپذیرند و فقط خروجیهای صوتی تولید میکنند.
- تولید چندگوینده با یک درخواست (
speech_config.speakers) از حداکثر ۲ گوینده بااستفاده از صداهای پیشساخته پشتیبانی میکند. برای ترکیب صداهای طراحیشده سفارشی (voice_...) یا تکرارشده (voice_.../voicekey_...) در مکالمه چندشخصیتی، نوبت هر گوینده را بهطور جداگانه ترکیب کنید. ازآنجاییکه درخواستهای یکتایی بهطور پیشفرضaudio/wavرا با سرایند RIFF ۴۴ بایتی برمیگردانند، PCM خام ({"type": "audio", "mime_type": "audio/l16"}) را درخواست کنید یا سرایند WAV را از هر نوبت قبلاز بههم پیوستن قابهای صوتی PCM ۲۴ کیلوهرتزی حذف کنید. - محدودیتهای ذخیرهسازی صدای سفارشی و TTL:
- صداهای حالتدار (
store=True، با پیامواره یا تکثیرشده): حداکثر ۲۰۰ صدا در هر پروژه با زمان بقای ۱ ساله (زمان بقا). - کلیدهای صوتی بدون وضعیت (
store=False،voicekey_...): TTL ۷ روزه (زمان زنده بودن).
- صداهای حالتدار (
- بخش زبانهای پشتیبانیشده را برای پوشش زبان بررسی کنید.
قدم بعدی چیست
- با طراحی صدا، از زبان طبیعی شخصیتهای صوتی سفارشی ایجاد کنید.
- صدای گوینده موجود را در همانندسازی صدا همانندسازی کنید.
- مشخصات مدل را در صفحههای مدل Gemini 3.8 Flash TTS و Gemini 3.8 Flash-Lite TTS مقایسه کنید.
- با Live API، صدای دوطرفه تعاملی را کاوش کنید.