ভয়েস রেপ্লিকেশন আপনাকে Gemini API Voices এন্ডপয়েন্ট ( POST /v1beta/voices ) ব্যবহার করে একটি সংক্ষিপ্ত অডিও নমুনা থেকে কোনো বক্তার কণ্ঠস্বরের বৈশিষ্ট্য অনুকরণ করতে দেয়। Gemini 3.8 Flash TTS ( gemini-3.8-flash-tts ) এবং Gemini 3.8 Flash-Lite TTS ( gemini-3.8-flash-lite-tts ) উভয়ই ভয়েস রেপ্লিকেশন সমর্থন করে।
একটি অনুকৃত কণ্ঠস্বর প্রতিলিপি করা, সম্মতি যাচাই করা এবং তার অডিশন দেওয়ার দ্রুততম উপায় হলো গুগল এআই স্টুডিও -এর ইন্টারেক্টিভ ভয়েস রেপ্লিকেশন অভিজ্ঞতা। আপনি সরাসরি ব্রাউজারে রেফারেন্স এবং সম্মতি ক্লিপ রেকর্ড বা আপলোড করতে পারেন, কণ্ঠস্বরটি প্রিভিউ করতে পারেন এবং ফলস্বরূপ প্রাপ্ত voice_... আইডি সরাসরি আপনার অ্যাপ্লিকেশন কোডে কপি করতে পারেন।
স্টেটফুল বনাম স্টেটলেস স্টোরেজ মোড
voices.create ( POST /v1beta/voices ) কল করার সময় ভয়েস রেপ্লিকেশন দুটি স্টোরেজ মোড সমর্থন করে, যেখানে ডিফল্টরূপে স্টেটফুল স্টোরেজ সক্রিয় থাকে:
- স্টেটফুল স্টোরেজ (
store=True, প্রস্তাবিত ডিফল্ট): গুগল আপনার ভেরিফাইড ভয়েস প্রোফাইলটি আপনার প্রোজেক্টে সংরক্ষণ করে এবং একটি লাইটওয়েট, পারসিস্টেন্টvoice_id(replicated_voice.id, যেমনvoice_abc123...) রিটার্ন করে। আপনি এইvoice_idবিভিন্ন রিকোয়েস্টে পাস করতে পারেন এবংvoices.list(),voices.get(), ওvoices.delete()ব্যবহার করে এটি ম্যানেজ করতে পারেন। - স্টেটলেস ক্লায়েন্ট-পরিচালিত কী (
store=False, ঐচ্ছিক): যেসব ওয়ার্কলোডের জন্য বায়োমেট্রিক ভয়েস প্রোফাইলের সার্ভার-সাইডে কোনো স্থায়িত্বের প্রয়োজন হয় না, সেগুলোর জন্যstore=Falseসেট করুন। এপিআই একটি এনক্রিপ্টেড, স্বয়ংসম্পূর্ণvoice_key(replicated_voice.key, যাvoicekey_...দিয়ে শুরু হয়) রিটার্ন করে, যা আপনার অ্যাপ্লিকেশন স্থানীয়ভাবে সংরক্ষণ করে এবং সিন্থেসিস অনুরোধে সরাসরি পাস করে।
| স্টোরেজ মোড | শনাক্তকারী | প্রকল্পের সীমা | ধরে রাখা (TTL) |
|---|---|---|---|
স্টেটফুল ভয়েস ( store=True ) | voice_... | প্রতিটি প্রকল্পে ২০০টি কণ্ঠস্বর (প্রেরিত এবং অনুলিখিত কণ্ঠস্বরের মধ্যে ভাগ করা) | ১ বছর |
স্টেটলেস ভয়েস কী ( store=False ) | voicekey_... | ক্লায়েন্ট-পরিচালিত | ৭ দিন |
অডিও এবং সম্মতির প্রয়োজনীয়তা
প্রতিটি CreateVoice রেপ্লিকেশন অনুরোধের জন্য একই প্রাপ্তবয়স্ক বক্তার দুটি আসল মানুষের অডিও রেকর্ডিং প্রয়োজন (২৪ কিলোহার্টজ মনো ১৬-বিট WAV ফরম্যাট সুপারিশকৃত):
- রেফারেন্স অডিও (
source_audio): যে বক্তার কণ্ঠস্বর আপনি অনুকরণ করতে চান, তাঁর স্পষ্ট ও স্বাভাবিক কথার ১০-৩০ সেকেন্ডের একটি ক্লিপ। - সম্মতি অডিও (
consent_audio): একই বক্তার একটি রেকর্ডিং, যেখানে তিনি সমর্থিত ভাষাগুলোর মধ্যে যেকোনো একটিতে (যেমন, ইংরেজিতে) বাধ্যতামূলক সম্মতি বিবৃতিটি স্পষ্টভাবে পাঠ করেন: > "আমি এই কণ্ঠস্বরের মালিক এবং আমি গুগলকে এই কণ্ঠস্বর ব্যবহার করে একটি কৃত্রিম ভয়েস মডেল তৈরি করার জন্য সম্মতি দিচ্ছি।"
একটি প্রতিলিপিকৃত ভয়েস তৈরি করুন (স্টেটফুল ডিফল্ট)
আপনার প্রোজেক্টে একটি রেপ্লিকেটেড ভয়েস প্রোফাইল তৈরি ও সংরক্ষণ করতে Google GenAI SDK ( google-genai 2.25.0+ / @google/genai 2.24.0+) অথবা store=True সহ REST API ব্যবহার করুন:
পাইথন
import base64
from google import genai
client = genai.Client()
with open("reference_speaker.wav", "rb") as f:
source_b64 = base64.b64encode(f.read()).decode("utf-8")
with open("speaker_consent.wav", "rb") as f:
consent_b64 = base64.b64encode(f.read()).decode("utf-8")
# Create a persistent replicated voice (store=True)
replicated_voice = client.voices.create(
store=True,
voice={
"model": "gemini-3.8-flash-tts",
"type": "replicated",
"display_name": "Custom Replicated Speaker",
"replicated": {
"source_audio": {
"mime_type": "audio/wav",
"data": source_b64,
},
"consent_audio": {
"mime_type": "audio/wav",
"data": consent_b64,
},
},
},
)
print(f"Created voice ID: {replicated_voice.id}")
জাভাস্ক্রিপ্ট
import * as fs from "node:fs";
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
const sourceB64 = fs.readFileSync("reference_speaker.wav").toString("base64");
const consentB64 = fs.readFileSync("speaker_consent.wav").toString("base64");
// Create a persistent replicated voice (store: true)
const replicatedVoice = await ai.voices.create({
store: true,
voice: {
model: "gemini-3.8-flash-tts",
type: "replicated",
display_name: "Custom Replicated Speaker",
replicated: {
source_audio: {
mime_type: "audio/wav",
data: sourceB64,
},
consent_audio: {
mime_type: "audio/wav",
data: consentB64,
},
},
},
});
console.log(`Created voice ID: ${replicatedVoice.id}`);
বিশ্রাম
SOURCE_B64=$(base64 -w 0 reference_speaker.wav)
CONSENT_B64=$(base64 -w 0 speaker_consent.wav)
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\": \"replicated\",
\"display_name\": \"Custom Replicated Speaker\",
\"replicated\": {
\"source_audio\": {
\"mime_type\": \"audio/wav\",
\"data\": \"$SOURCE_B64\"
},
\"consent_audio\": {
\"mime_type\": \"audio/wav\",
\"data\": \"$CONSENT_B64\"
}
}
}
}"
আপনার অনুকৃত কণ্ঠস্বর দিয়ে বক্তৃতা সংশ্লেষণ করুন
আপনার সিন্থেসিস অনুরোধে ফেরত আসা id ( voice_... ) পাস করুন:
পাইথন
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": (
"Hello! This audio was synthesized using a replicated"
" speaker voice."
),
"annotations": [{
"type": "speech_metadata",
"style": "warm and conversational",
}],
}],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"voice": replicated_voice.id},
]
},
)
with open("replicated_speech.wav", "wb") as f:
f.write(base64.b64decode(interaction.output_audio.data))
জাভাস্ক্রিপ্ট
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: "Hello! This audio was synthesized using a replicated speaker voice.",
annotations: [{
type: "speech_metadata",
style: "warm and conversational",
}],
}],
}],
response_format: { type: "audio" },
generation_config: {
speech_config: [
{ voice: replicatedVoice.id },
],
},
});
fs.writeFileSync("replicated_speech.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": "Hello! This audio was synthesized using a replicated speaker voice.",
"annotations": [{
"type": "speech_metadata",
"style": "warm and conversational"
}]
}]
}],
"response_format": {"type": "audio"},
"generation_config": {
"speech_config": [
{"voice": "voice_YOUR_REPLICATED_VOICE_ID"}
]
}
}'
সংরক্ষিত প্রতিলিপিকৃত ভয়েসগুলি পরিচালনা করুন
store=True দিয়ে তৈরি করা হলে, আপনার রেপ্লিকেট করা ভয়েসগুলো Voices API-এর মাধ্যমে তালিকাভুক্ত, ফিল্টার, পরিদর্শন এবং ডিলিট করা যাবে (সমস্ত ফিল্টার প্যারামিটারের জন্য Extended Voice Library এবং filtering দেখুন):
পাইথন
from google import genai
client = genai.Client()
# List stored replicated voices in your project
response = client.voices.list(type_=["replicated"])
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=replicated_voice.id)
# Delete a stored replicated voice
client.voices.delete(id=replicated_voice.id)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
// List stored replicated voices in your project
const response = await ai.voices.list({ type: ["replicated"] });
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(replicatedVoice.id);
// Delete a stored replicated voice
await ai.voices.delete(replicatedVoice.id);
বিশ্রাম
# List stored replicated voices in your project
curl -G "https://generativelanguage.googleapis.com/v1beta/voices" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
--data-urlencode "type=replicated"
# Retrieve a specific voice by ID
curl "https://generativelanguage.googleapis.com/v1beta/voices/voice_YOUR_REPLICATED_VOICE_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
# Delete a stored replicated voice
curl -X DELETE "https://generativelanguage.googleapis.com/v1beta/voices/voice_YOUR_REPLICATED_VOICE_ID" \
-H "x-goog-api-key: $GEMINI_API_KEY"
বিকল্প: স্টেটলেস ক্লায়েন্ট-পরিচালিত ভয়েস কী ( store=False )
আপনার অ্যাপ্লিকেশনে যদি ভয়েস প্রোফাইলের সার্ভার-সাইড সংরক্ষণের কোনো প্রয়োজন না থাকে, তাহলে রেপ্লিকেটেড ভয়েস তৈরি করার সময় store=False সেট করুন। এপিআই একটি এনক্রিপ্টেড voice_key ( replicated_voice.key , যা voicekey_... দিয়ে শুরু হয়) রিটার্ন করে, যা আপনি ক্লায়েন্ট-সাইডে সংরক্ষণ করেন এবং যেখানে voice আইডি গৃহীত হয়, সেখানে সরাসরি পাস করেন:
পাইথন
import base64
from google import genai
client = genai.Client()
with open("reference_speaker.wav", "rb") as f:
source_b64 = base64.b64encode(f.read()).decode("utf-8")
with open("speaker_consent.wav", "rb") as f:
consent_b64 = base64.b64encode(f.read()).decode("utf-8")
# Create a stateless client-managed voice key (store=False)
replicated_voice = client.voices.create(
store=False,
voice={
"model": "gemini-3.8-flash-tts",
"type": "replicated",
"replicated": {
"source_audio": {"mime_type": "audio/wav", "data": source_b64},
"consent_audio": {"mime_type": "audio/wav", "data": consent_b64},
},
},
)
# Pass replicated_voice.key ("voicekey_...") directly as the speaker voice
interaction = client.interactions.create(
model="gemini-3.8-flash-tts",
input=[{
"type": "user_input",
"content": [{
"type": "text",
"text": "Hello! This audio uses a stateless client-managed voice key.",
"annotations": [{
"type": "speech_metadata",
"style": "warm and conversational",
}],
}],
}],
response_format={"type": "audio"},
generation_config={
"speech_config": [
{"voice": replicated_voice.key},
]
},
)
জাভাস্ক্রিপ্ট
import * as fs from "node:fs";
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI();
const sourceB64 = fs.readFileSync("reference_speaker.wav").toString("base64");
const consentB64 = fs.readFileSync("speaker_consent.wav").toString("base64");
// Create a stateless client-managed voice key (store: false)
const replicatedVoice = await ai.voices.create({
store: false,
voice: {
model: "gemini-3.8-flash-tts",
type: "replicated",
replicated: {
source_audio: { mime_type: "audio/wav", data: sourceB64 },
consent_audio: { mime_type: "audio/wav", data: consentB64 },
},
},
});
// Pass replicatedVoice.key ("voicekey_...") directly as the speaker voice
const interaction = await ai.interactions.create({
model: "gemini-3.8-flash-tts",
input: [{
type: "user_input",
content: [{
type: "text",
text: "Hello! This audio uses a stateless client-managed voice key.",
annotations: [{
type: "speech_metadata",
style: "warm and conversational",
}],
}],
}],
response_format: { type: "audio" },
generation_config: {
speech_config: [
{ voice: replicatedVoice.key },
],
},
});
বিশ্রাম
SOURCE_B64=$(base64 -w 0 reference_speaker.wav)
CONSENT_B64=$(base64 -w 0 speaker_consent.wav)
curl "https://generativelanguage.googleapis.com/v1beta/voices" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-X POST \
-d "{
\"store\": false,
\"voice\": {
\"model\": \"gemini-3.8-flash-tts\",
\"type\": \"replicated\",
\"replicated\": {
\"source_audio\": {\"mime_type\": \"audio/wav\", \"data\": \"$SOURCE_B64\"},
\"consent_audio\": {\"mime_type\": \"audio/wav\", \"data\": \"$CONSENT_B64\"}
}
}
}"
ভাষা অনুসারে সমর্থিত সম্মতি বাক্যাংশ
সম্মতির অডিওটিতে অবশ্যই সমর্থিত ৩০টি ভাষার যেকোনো একটিতে সঠিক বিবৃতিটি স্পষ্টভাবে পাঠ করতে হবে:
| ভাষা | লোকেল ( lang_id ) | হুবহু সম্মতি বিবৃতি |
|---|---|---|
| আরবি | ar-XA | أنا مالك هذا الصوت وأوافق على أن تستخدم Google هذا الصوت لإنشاء نموذج صوتي اصطناعي. |
| বাংলা | bn-IN | আমি এই ভয়েসের বর্ণনা এবং আমি একটি সিকেটিক ভয়েস মডেল তৈরি করতে এই ভয়েস ব্যবহার করে Google-এর সাথে ঐক্যবদ্ধভাবে। |
| চীনা (সরলীকৃত) | zh-CN | 我是此声音的拥有者并授权谷歌使用此声音创建语音合成模型 |
| ডাচ | nl-NL | Ik ben de eigenaar van deze stem en ik geef Google toestemming om deze stem te gebruiken om een synthetisch stemmodel te maken. |
| ইংরেজি (মার্কিন যুক্তরাষ্ট্র) | en-US | আমি এই কণ্ঠস্বরের মালিক এবং আমি গুগলকে এই কণ্ঠস্বর ব্যবহার করে একটি কৃত্রিম কণ্ঠ মডেল তৈরি করার অনুমতি দিচ্ছি। |
| ইংরেজি (যুক্তরাজ্য) | en-GB | আমি এই কণ্ঠস্বরের মালিক এবং আমি গুগলকে এই কণ্ঠস্বর ব্যবহার করে একটি কৃত্রিম কণ্ঠ মডেল তৈরি করার অনুমতি দিচ্ছি। |
| ইংরেজি (ভারত) | en-IN | আমি এই কণ্ঠস্বরের মালিক এবং আমি গুগলকে এই কণ্ঠস্বর ব্যবহার করে একটি কৃত্রিম কণ্ঠ মডেল তৈরি করার অনুমতি দিচ্ছি। |
| ইংরেজি (অস্ট্রেলিয়া) | en-AU | আমি এই কণ্ঠস্বরের মালিক এবং আমি গুগলকে এই কণ্ঠস্বর ব্যবহার করে একটি কৃত্রিম কণ্ঠ মডেল তৈরি করার অনুমতি দিচ্ছি। |
| ফরাসি (ফ্রান্স) | fr-FR | Je suis le propriétaire de cette voix et j'autorise Google à utiliser cette voix pour créer un modèle de voix synthétique. |
| ফরাসি (কানাডা) | fr-CA | Je suis le propriétaire de cette voix et j'autorise Google à utiliser cette voix pour créer un modèle de voix synthétique. |
| জার্মান | de-DE | Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass Google diese Stimme zur Erstellung eines synthetischen Stimmmmodells verwendet. |
| গুজরাটি | gu-IN | আমি এই વોઈસનો স্বতন্ত্র আমি এবং সিন্থেটিক વોઈસ মোডল তৈরির জন্য এই વોઈસનો ব্যবহার google করে নেবো આપું છું |
| হিন্দি | hi-IN | আমি এই আওয়াজ শুনতে এবং আমি সিন্থেটিক আওয়াজ মডেল তৈরি করতে Google-এর এই আওয়াজটি ব্যবহার করা দেখতে দেখতে |
| ইন্দোনেশিয়ান | id-ID | Saya pemilik suara ini dan saya menyetujui Google menggunakan suara ini untuk membuat মডেল suara sintetis. |
| ইতালীয় | it-IT | Sono il proprietario di questa voce e acconsento che Google la utilizzi per creature un modello di voce sintetica. |
| জাপানি | ja-JP | 私はこの音声の所有者であり、Googleがこの音声を使用して音声合成モデルを作成することを承認します. |
| কন্নড় | kn-IN | ನಾನು ಈ ಧ್ವನಿಯ ಮಾಲಿಕ ಮತ್ತು ಸಂಶ್ಲೇಷನಧತ ಮಾದರಿಯನ್ನು ರಚಿಸಲು ಈ ಧ್ವನಿಯನ್ನು ಬಳಸಿಕೊಂಡುಗೂಗಲ್ ಗೆ ನಾನು ಸಮ್ಮತಿಸುತ್ತೇನೆ. |
| কোরিয়ান | ko-KR | 나는 이 음성의 소유자이며 구글이 이 음성을 사용하여 음성 합성 모델을 생성 모델을 생성 허용합니다। |
| মালয়ালম | ml-IN | ഈ ശബ്ദത്തിന്റെ ഉടമ ഞാനാണ്, ഒരു സിന്തറ്റിക് വ്റ്റിക് വ്റ്റിക് സൃഷ്ടിക്കാൻ ഈ ശബ്ദം ഉപയോഗിക്കുന്നതിന് ഞാൻ Google-ന് സമ്മതം നൽകുന്നു. |
| মারাঠি | mr-IN | আমি এই আওয়াজ ব্যবহার করছি এবং সিন্থেটিক হোয়াইটস পাওয়ার তৈরি করতে আমি গুগলকে ব্যবহার করি संमती देतो |
| পোলিশ | pl-PL | Jestem właścicielem tego głosu i wyrażam zgodę na wykorzystanie go przez Google w celu utworzenia syntetycznego modelu głosu. |
| পর্তুগিজ (ব্রাজিল) | pt-BR | Eu sou o proprietário desta voz e autorizo o Google a usá-la para criar um modelo de voz sintética. |
| রাশিয়ান | ru-RU | Я являюсь владельцем этого голоса и даю согласие Google на использование этого голоса для создания модели синтеготоичем. |
| স্প্যানিশ (স্পেন) | es-ES | Soy el propietario de esta voz y doy mi consentimiento para que Google la utilice para crear un modelo de voz sintética. |
| স্প্যানিশ (মার্কিন যুক্তরাষ্ট্র) | es-US | Soy el propietario de esta voz y doy mi consentimiento para que Google la utilice para crear un modelo de voz sintética. |
| তামিল | ta-IN | நான் இந்த குரலின் உரிமையாளர் மற்றும் செயற்கை குரலிய் உருவாக்க இந்த குரலை பயன்படுத்த குகல்க்கு நான் ஒப்புக்கொள்கிறேன். |
| তেলুগু | te-IN | నేను ఈ వాయిస్ యజమానిని మరియు సింతకటి వాయిస్ మోడల్ ని రూపొందించడానికి ఈ వియి ఉపయోగించడానికి google |
| থাই | th-TH | ฉันเป็นเจ้าของเสียงนี้ และฉันยินยอมให้ Google ใช้เสียงนี้เพื่อสร้างแบบจำลองเสียงสัะงาร |
| তুর্কি | tr-TR | Bu sesin sahibi benim ve Google'ın bu sesi kullanarak sentetik bir ses modeli oluşturmasına izin veriyorum. |
| ভিয়েতনামী | vi-VN | Tôi là chủ sở hữu giọng nói này và tôi đồng ý cho Google sử dụng giọng nói này để tạo mô hình giọng tổng t. |
রেফারেন্স অডিও রেকর্ড করার সর্বোত্তম পদ্ধতি
- শান্ত পরিবেশে রেকর্ড করুন: ঘরের প্রতিধ্বনি, পারিপার্শ্বিক কোলাহল, সঙ্গীত এবং একে অপরের উপর পড়া কণ্ঠস্বর কমিয়ে আনুন।
- রেকর্ডিংয়ের শর্ত মেলান:
source_audioএবংconsent_audioউভয়ই একই মাইক্রোফোনে ও একই অ্যাকোস্টিক সেটিংয়ে রেকর্ড করুন, যাতে স্পিকার যাচাইকরণ পরীক্ষাটি নির্ভরযোগ্যভাবে সফল হয়। - ২৪ কিলোহার্টজ মনো WAV-এ রূপান্তর করুন: সর্বোত্তম ফলাফলের জন্য, এনকোড করার আগে ইনপুট অডিওকে ২৪ কিলোহার্টজ মনো ১৬-বিট পিসিএম WAV-এ রিস্যাম্পল করুন।
এরপর কী?
- ভয়েস ডিজাইনে টেক্সট ডেসক্রিপশন থেকে কীভাবে কাস্টম পারসোনা তৈরি করতে হয়, তা শিখুন।
- টেক্সট-টু-স্পিচ গাইডে টার্ন-লেভেল স্টাইলিং, ইনলাইন ট্যাগ এবং একাধিক বক্তার সংলাপ সম্পর্কে জানুন।