يمكن لواجهة Gemini API تحويل إدخال النص إلى صوت أحادي المتحدث أو متعدد المتحدثين باستخدام إمكانات إنشاء النص إلى كلام (TTS) في Gemini. يمكن التحكّم في عملية إنشاء الصوت باستخدام ميزة "تحويل النص إلى كلام"، ما يعني أنّه يمكنك استخدام اللغة الطبيعية لتنظيم التفاعلات وتحديد الأسلوب واللهجة والسرعة والنبرة في الصوت.
تختلف إمكانية تحويل النص إلى كلام عن إمكانية إنشاء الكلام المقدَّمة من خلال Live API، وهي مصمَّمة لتوفير تجربة تفاعلية للمحتوى الصوتي غير المنظَّم، وللمدخلات والمخرجات المتعدّدة الوسائط. في حين أنّ واجهة Live API تتفوّق في سياقات المحادثات الديناميكية، تم تصميم ميزة تحويل النص إلى كلام من خلال Gemini API لتناسب السيناريوهات التي تتطلّب تلاوة نصية دقيقة مع إمكانية التحكّم بدقة في الأسلوب والصوت، مثل إنشاء البودكاست أو الكتب المسموعة.
يوضّح لك هذا الدليل كيفية إنشاء محتوى صوتي يتضمّن متحدثًا واحدًا أو عدة متحدثين من نص.
قبل البدء
تأكَّد من استخدام إصدار من نموذج Gemini 2.5 يتضمّن إمكانات تحويل النص إلى كلام (TTS) في Gemini، كما هو موضّح في قسم النماذج المتوافقة. للحصول على أفضل النتائج، حدِّد النموذج الأنسب لحالة الاستخدام المحدّدة.
قد يكون من المفيد اختبار نماذج تحويل النص إلى كلام من Gemini في AI Studio قبل البدء في عملية الإنشاء.
تحويل النص إلى كلام بصوت شخص واحد
لتحويل النص إلى صوت متحدث واحد، اضبط طريقة الرد على "صوت"،
وامرر كائن speech_config مع اسم صوت.
عليك اختيار اسم صوت من أصوات الإخراج المُنشأة مسبقًا.
يحفظ هذا المثال الصوت الناتج من النموذج في ملف موجي:
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();
REST
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,
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"speaker": "Joe", "voice": "Kore"},
{"speaker": "Jane", "voice": "Puck"}
]
}
)
wave_file('out.wav', base64.b64decode(interaction.output_audio.data))
JavaScript
import {GoogleGenAI} from '@google/genai';
import wav from 'wav';
async function saveWaveFile(
filename,