টেক্সট-টু-স্পিচ জেনারেশন (TTS)

জেমিনি এপিআই, জেমিনির টেক্সট-টু-স্পিচ (টিটিএস) জেনারেশন ক্ষমতা ব্যবহার করে টেক্সট ইনপুটকে একক-বক্তা বা একাধিক-বক্তার অডিওতে রূপান্তর করতে পারে। টেক্সট-টু-স্পিচ জেনারেশন নিয়ন্ত্রণযোগ্য , যার অর্থ হলো আপনি অডিওর স্টাইল , উচ্চারণ , গতি এবং সুর নিয়ন্ত্রণ করার জন্য স্ট্রাকচার্ড টার্ন মেটাডেটা ( speech_metadata ) এবং ইনলাইন ভোকাল ট্যাগ একত্রিত করতে পারেন।

টিটিএস (TTS) সক্ষমতাটি লাইভ এপিআই (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 3.8 TTS মডেল ব্যবহার করে টেক্সটকে একক-স্পিকার অডিওতে রূপান্তর করতে, parts[].text হুবহু ট্রান্সক্রিপ্টটি পাস করুন, parts[].speech_metadata ফাইলে টার্ন-লেভেল স্টাইলিং সংযুক্ত করুন এবং speechConfig.voiceConfig ফাইলে আপনার ভয়েস কনফিগার করুন। আপনি একটি প্রি-বিল্ট ভয়েসের নাম, একটি এক্সটেন্ডেড ভয়েস লাইব্রেরি আইডি, একটি কাস্টম ভয়েস ডিজাইন আইডি ( voice_... ), অথবা একটি ভয়েস রেপ্লিকেশন আইডি ( voice_... , বা ঐচ্ছিক স্টেটলেস voicekey_... ) পাস করতে পারেন।

এই উদাহরণটি মডেল থেকে প্রাপ্ত আউটপুট অডিও একটি WAV ফাইলে সংরক্ষণ করে:

পাইথন

from google import genai

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {"style": "cheerful and friendly"},
        }],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {
            "voice_config": {"voice": "Kore"}
        },
    },
)

data = response.candidates[0].content.parts[0].inline_data.data
with open("out.wav", "wb") as f:
    f.write(data)

জাভাস্ক্রিপ্ট

import {GoogleGenAI} from '@google/genai';
import * as fs from 'node:fs';

async function main() {
   const ai = new GoogleGenAI({});

   const response = await ai.models.generateContent({
      model: 'gemini-3.8-flash-tts',
      contents: [{
         role: 'user',
         parts: [{
            text: 'Have a wonderful day!',
            speechMetadata: { style: 'cheerful and friendly' },
         }],
      }],
      config: {
         responseModalities: ['AUDIO'],
         speechConfig: {
            voiceConfig: { voice: 'Kore' },
         },
      },
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   fs.writeFileSync('out.wav', audioBuffer);
}
await main();

বিশ্রাম

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "contents": [{
          "role": "user",
          "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {
              "style": "cheerful and friendly"
            }
          }]
        }],
        "generationConfig": {
          "responseModalities": ["AUDIO"],
          "speechConfig": {
            "voiceConfig": {
              "voice": "Kore"
            }
          }
        }
    }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
          base64 --decode > out.wav

মাল্টি-স্পিকার টিটিএস

একাধিক স্পিকারের সংলাপের জন্য, multiSpeakerVoiceConfig.speakerVoiceConfigs ফাইলে prebuiltVoiceConfig ব্যবহার করে দুটি স্পিকার কনফিগার করুন এবং প্রতিটি সংলাপের পালাকে একটি পৃথক part হিসাবে পাস করুন, যেখানে speech_metadata তে speaker এবং ঐচ্ছিক পালা-স্তরের style উভয়ই উল্লেখ করতে হবে।

পাইথন

from google import genai

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [
            {
                "text": "How's it going today Jane?",
                "speech_metadata": {
                    "speaker": "Joe",
                    "style": "cheerful and friendly",
                },
            },
            {
                "text": "Not too bad, how about you? Ready to test these new voices?",
                "speech_metadata": {
                    "speaker": "Jane",
                    "style": "calm and relaxed",
                },
            },
        ],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {
            "multi_speaker_voice_config": {
                "speaker_voice_configs": [
                    {
                        "speaker": "Joe",
                        "voice_config": {
                            "prebuilt_voice_config": {"voice_name": "Puck"}
                        },
                    },
                    {
                        "speaker": "Jane",
                        "voice_config": {
                            "prebuilt_voice_config": {"voice_name": "Kore"}
                        },
                    },
                ]
            }
        },
    },
)

data = response.candidates[0].content.parts[0].inline_data.data
with open("out.wav", "wb") as f:
    f.write(data)

জাভাস্ক্রিপ্ট

import {GoogleGenAI} from '@google/genai';
import * as fs from 'node:fs';

async function main() {
   const ai = new GoogleGenAI({});

   const response = await ai.models.generateContent({
      model: 'gemini-3.8-flash-tts',
      contents: [{
         role: 'user',
         parts: [
            {
               text: "How's it going today Jane?",
               speechMetadata: {
                  speaker: 'Joe',
                  style: 'cheerful and friendly',
               },
            },
            {
               text: 'Not too bad, how about you? Ready to test these new voices?',
               speechMetadata: {
                  speaker: 'Jane',
                  style: 'calm and relaxed',
               },
            },
         ],
      }],
      config: {
         responseModalities: ['AUDIO'],
         speechConfig: {
            multiSpeakerVoiceConfig: {
               speakerVoiceConfigs: [
                  {
                     speaker: 'Joe',
                     voiceConfig: {
                        prebuiltVoiceConfig: { voiceName: 'Puck' },
                     },
                  },
                  {
                     speaker: 'Jane',
                     voiceConfig: {
                        prebuiltVoiceConfig: { voiceName: 'Kore' },
                     },
                  },
               ],
            },
         },
      },
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   fs.writeFileSync('out.wav', audioBuffer);
}

await main();

বিশ্রাম

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [
        {
          "text": "How'\''s it going today Jane?",
          "speech_metadata": {
            "speaker": "Joe",
            "style": "cheerful and friendly"
          }
        },
        {
          "text": "Not too bad, how about you? Ready to test these new voices?",
          "speech_metadata": {
            "speaker": "Jane",
            "style": "calm and relaxed"
          }
        }
      ]
    }],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "multiSpeakerVoiceConfig": {
          "speakerVoiceConfigs": [
            {
              "speaker": "Joe",
              "voiceConfig": {
                "prebuiltVoiceConfig": { "voiceName": "Puck" }
              }
            },
            {
              "speaker": "Jane",
              "voiceConfig": {
                "prebuiltVoiceConfig": { "voiceName": "Kore" }
              }
            }
          ]
        }
      }
    }
  }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
      base64 --decode > out.wav

মেটাডেটা এবং ট্যাগ ব্যবহার করে বক্তৃতার ধরণ নিয়ন্ত্রণ করুন

জেমিনি ৩.৮ টিটিএস text ফিল্ডটিকে হুবহু প্রতিলিপি হিসেবে বিবেচনা করে। মঞ্চ নির্দেশাবলী উচ্চস্বরে না পড়িয়েই উপস্থাপনা নিয়ন্ত্রণ করতে, আপনার নির্দেশাবলীকে পরিধি অনুযায়ী ভাগ করুন:

  • পুরো পালা জুড়ে ধারাবাহিক বাচনভঙ্গি ( speech_metadata.style ): একটি সম্পূর্ণ পালা জুড়ে প্রযোজ্য আবেগ, বাচনভঙ্গি, স্বরভঙ্গি, গতি এবং কণ্ঠস্বর speech_metadata.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..." )।

বিস্তারিত সর্বোত্তম অনুশীলন জানতে প্রম্পটিং নির্দেশিকা দেখুন।

ভয়েস বিকল্পগুলি

জেমিনি ৩.৮ টিটিএস চারটি উপায়ে ভয়েস নির্বাচন বা তৈরি করার সুবিধা দেয়:

  1. পূর্ব-নির্মিত স্টুডিও ভয়েস: নিম্নলিখিত সারণীতে তালিকাভুক্ত ৩০টি নির্বাচিত ভয়েস।
  2. বর্ধিত ভয়েস লাইব্রেরি: বিভিন্ন ভাষা, উচ্চারণভঙ্গি এবং চরিত্রের ধরনের শত শত অতিরিক্ত কণ্ঠস্বর, যা client.voices.list() ( GET /v1beta/voices ) ব্যবহার করে অ্যাক্সেস করা যায়।
  3. ভয়েস ডিজাইন : গুগল এআই স্টুডিওতে স্বাভাবিক ভাষার বর্ণনা থেকে অথবা POST /v1beta/voices ( type="prompted" ব্যবহার করে একটি কাস্টম ভোকাল পার্সোনা তৈরি করুন, যা একটি স্থায়ী voice_... ID এবং CreateVoice ও GetVoice এ একটি sample_audio WAV প্রিভিউ রিটার্ন করে।
  4. ভয়েস রেপ্লিকেশন : গুগল এআই স্টুডিওতে রেফারেন্স এবং কনসেন্ট অডিও থেকে অথবা POST /v1beta/voices ব্যবহার করে একজন স্পিকারের ভয়েস রেপ্লিকেট করুন ( type="replicated" , ডিফল্টরূপে persistent store=True অথবা ঐচ্ছিক stateless store=False )।

কাস্টম ভয়েস সীমা এবং TTL

কণ্ঠস্বরের ধরণ স্টোরেজ মোড কোটা / সীমা ধরে রাখা (TTL)
স্টেটফুল ভয়েস ( voice_... , প্রম্পটেড বা রেপ্লিকেটেড) store=True প্রতিটি প্রকল্পে ২০০টি কণ্ঠস্বর (প্রেরিত এবং অনুলিখিত কণ্ঠস্বরের মধ্যে ভাগ করা) শেষ ব্যবহারের তারিখ থেকে ১ বছর*
স্টেটলেস ভয়েস কী ( voicekey_... , প্রতিলিপিকৃত) store=False ক্লায়েন্ট-পরিচালিত ৭ দিন

* TTL এক্সটেনশন: প্রতিবার ভয়েসটি সক্রিয়ভাবে ব্যবহৃত হলে (ভয়েসটি দিয়ে স্পিচ সিন্থেসাইজ করে অথবা রিমিক্সিংয়ের জন্য বেস ভয়েস হিসেবে ব্যবহার করে) ১-বছরের রিটেনশন উইন্ডোটি রিসেট হয়ে যায়। ১ বছর ধরে কোনো অ্যাক্টিভিটি না থাকলে ভয়েসগুলো স্বয়ংক্রিয়ভাবে ডিলিট হয়ে যায়।

পূর্ব-নির্মিত কণ্ঠস্বর

জেফির -- ব্রাইট পাক -- উচ্ছ্বসিত চারন -- তথ্যমূলক
কোর -- ফার্ম ফেনরির -- উত্তেজিত লেডা -- যুবতী
ওরুস -- ফার্ম Aoede -- Breezy ক্যালিরো -- সহজ-সরল
Autonoe -- Bright এনসেলাডাস -- শ্বাসপ্রশ্বাসযুক্ত আইপেটাস -- পরিষ্কার
উমব্রিয়েল -- সহজ-সরল আলজিবা -- মসৃণ ডেসপিনা -- মসৃণ
এরিনোম -- পরিষ্কার অ্যালজেনিব -- গ্র্যাভেলি রসলগেথি -- তথ্যমূলক
লাওমেডিয়া -- উচ্ছ্বসিত আখেরনার -- নরম আলনিলাম -- ফার্ম
শেডার -- এমনকি গ্যাক্রাক্স -- পরিপক্ক পুলচেরিমা -- ফরোয়ার্ড
আচির্ড -- বন্ধুত্বপূর্ণ Zubenelgenubi -- Casual ভিন্ডেমিয়াট্রিক্স -- কোমল
সাদাচবিয়া -- প্রাণবন্ত সাদালটেগার -- জ্ঞানী সুলাফাত -- উষ্ণ

বর্ধিত ভয়েস লাইব্রেরি এবং ফিল্টারিং

পূর্ববর্তী সারণীতে উল্লেখিত ৩০টি স্টুডিও ভয়েস ছাড়াও, এক্সটেন্ডেড ভয়েস লাইব্রেরিতে বিভিন্ন ভাষা, আঞ্চলিক উচ্চারণ, চরিত্রের ধরণ এবং ডোমেন জুড়ে শত শত অতিরিক্ত ভয়েস রয়েছে। আপনি গুগল এআই স্টুডিও -তে সম্পূর্ণ ভয়েস লাইব্রেরিটি ইন্টারেক্টিভভাবে ব্রাউজ, ফিল্টার এবং অডিশন করতে পারেন, অথবা client.voices.list() ব্যবহার করে প্রোগ্রাম্যাটিকভাবে এটি কোয়েরি করতে পারেন ( GET /v1beta/voices , google-genai 2.25.0+ / @google/genai 2.24.0+ ব্যবহার করে)।

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 (REST-এ context ) list[str] সর্বোত্তম ব্যবহারের ক্ষেত্র (উদাহরণস্বরূপ, ["Audiobook", "Conversational", "News"] )।
type (পাইথনে type_ ) list[str] ভয়েস সোর্স অনুযায়ী ফিল্টার করুন: "prebuilt" , "prompted" ( ভয়েস ডিজাইন ), অথবা "replicated" ( ভয়েস রেপ্লিকেশন )।
search str ফ্রি-টেক্সট সাবস্ট্রিং সার্চ display_name এবং description উভয়ের ক্ষেত্রেই কেস-ইনসেনসিটিভভাবে ম্যাচ করেছে।
page_size int প্রতি পৃষ্ঠায় ফেরত আসা কণ্ঠস্বরের সর্বোচ্চ সংখ্যা (ডিফল্ট 50 , সর্বোচ্চ 1000 )।
page_token str ফলাফলের পরবর্তী পৃষ্ঠা আনার জন্য response.next_page_token থেকে টোকেন।

পাইথন

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}"
    )

জাভাস্ক্রিপ্ট

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-lite-tts ) ১০০টিরও বেশি ভাষা সমর্থন করে।

ভাষা জেমিনি ৩.৮ ফ্ল্যাশ টিটিএস জেমিনি ৩.৮ ফ্ল্যাশ-লাইট টিটিএস
আচেহনিজ (আরবি লিপি) ✔️ ✔️
আফ্রিকান ✔️ ✔️
আকান ✔️ ✔️
আমহারিক ✔️ ✔️
আর্মেনীয় ✔️ ✔️
অসমীয়া ✔️ ✔️
অবধী ✔️ ✔️
বালিনিজ ✔️ ✔️
বাংলা ✔️ ✔️
বানজার (আরবি লিপি) ✔️ —
বানজার (ল্যাটিন লিপি) ✔️ ✔️
বাশকির ✔️ —
বাস্ক ✔️ ✔️
বেলারুশীয় ✔️ ✔️
বেম্বা ✔️ —
ভোজপুরি ✔️ ✔️
বসনীয় ✔️ ✔️
বুগিনিজ ✔️ ✔️
বুলগেরীয় ✔️ ✔️
বর্মী ✔️ —
ক্যান্টনিজ ✔️ ✔️
কাতালান ✔️ ✔️
সেবুয়ানো ✔️ ✔️
কেন্দ্রীয় কুর্দিশ ✔️ ✔️
ছত্তিশগড়ী ✔️ ✔️
চীনা (হ্যান্স লিপি) ✔️ ✔️
চীনা (হান্ট লিপি) ✔️ ✔️
ক্রিমিয়ান তাতার ✔️ —
ক্রোয়েশীয় ✔️ ✔️
চেক ✔️ ✔️
ড্যানিশ ✔️ ✔️
ডাচ ✔️ ✔️
ডাইলা ✔️ —
জংখা ✔️ —
মিশরীয় আরবি ✔️ ✔️
ইংরেজি ✔️ ✔️
এস্তোনিয়ান ✔️ ✔️
ফিলিপিনো ✔️ ✔️
ফিনিশ ✔️ —
ফরাসি ✔️ ✔️
গ্যালিসিয়ান ✔️ ✔️
গান্ডা ✔️ ✔️
জর্জিয়ান ✔️ ✔️
জার্মান ✔️ ✔️
গ্রীক ✔️ ✔️
গুয়ারানি ✔️ —
গুজরাটি ✔️ ✔️
হাইতিয়ান ক্রেওল ✔️ ✔️
হালহ মঙ্গোলিয়ান ✔️ ✔️
হাউসা ✔️ ✔️
হিব্রু ✔️ ✔️
হিন্দি ✔️ ✔️
হাঙ্গেরীয় ✔️ ✔️
আইসল্যান্ডীয় ✔️ ✔️
ইগবো ✔️ —
ইলোকো ✔️ ✔️
ইন্দোনেশিয়ান ✔️ ✔️
ইরানি ফার্সি ✔️ ✔️
ইতালীয় ✔️ ✔️
জাপানি ✔️ ✔️
জাভানিজ ✔️ ✔️
কাবাইল ✔️ —
কাম্বা ✔️ ✔️
কন্নড় ✔️ ✔️
কাশ্মীরি (আরবি লিপি) ✔️ ✔️
কাশ্মীরি (দেব লিপি) ✔️ ✔️
কাজাখ ✔️ ✔️
খেমার ✔️ ✔️
কিকুয়ু ✔️ ✔️
কিনিয়ারওয়ান্ডা ✔️ ✔️
কঙ্গো ✔️ ✔️
কোরিয়ান ✔️ ✔️
কিরগিজ ✔️ ✔️
লাও ✔️ ✔️
লাটগালিয়ান ✔️ —
লিঙ্গালা ✔️ ✔️
লিথুয়ানিয়ান ✔️ —
লুক্সেমবার্গীয় ✔️ —
ম্যাসিডোনিয়ান ✔️ ✔️
মাগাহি ✔️ ✔️
মৈথিলী ✔️ ✔️
মালয়ালম ✔️ ✔️
মাল্টিজ ✔️ ✔️
মণিপুরি ✔️ ✔️
মারাঠি ✔️ ✔️
মিনাংকাবাউ (আরবি লিপি) ✔️ ✔️
মিনাংকাবাউ (ল্যাটিন লিপি) ✔️ —
মিজো ✔️ ✔️
নেপালি (ব্যক্তিগত ভাষা) ✔️ ✔️
নাইজেরিয়ান ফুলফুলডে ✔️ ✔️
উত্তর আজারবাইজানীয় ✔️ ✔️
উত্তর সোথো ✔️ ✔️
উত্তর উজবেক ✔️ ✔️
নরওয়েজিয়ান বোকমাল ✔️ ✔️
নরওয়েজিয়ান নিনরস্ক ✔️ ✔️
নিয়ানজা ✔️ ✔️
অক্সিটান ✔️ —
ওড়িয়া (ব্যক্তিগত ভাষা) ✔️ ✔️
পাঙ্গাসিনান ✔️ —
ফার্সি (আফগানিস্তান) ✔️ ✔️
পোলিশ ✔️ ✔️
পর্তুগিজ ✔️ ✔️
পাঞ্জাবি ✔️ ✔️
রোমানিয়ান ✔️ ✔️
রাশিয়ান ✔️ ✔️
সাঁওতালি ✔️ ✔️
সার্বিয়ান ✔️ ✔️
সিন্ধি ✔️ —
সিংহলী ✔️ ✔️
স্লোভাক ✔️ ✔️
স্লোভেনীয় ✔️ —
সোমালি ✔️ —
দক্ষিণ আজারবাইজানীয় ✔️ ✔️
দক্ষিণ পশতু ✔️ ✔️
দক্ষিণ সোথো ✔️ —
স্প্যানিশ ✔️ ✔️
প্রমিত আরবি (আরবি লিপি) ✔️ ✔️
প্রমিত আরবি (ল্যাটিন লিপি) ✔️ ✔️
প্রমিত লাতভিয়ান ✔️ ✔️
প্রমিত মালয় ✔️ ✔️
সোয়াহিলি (ব্যক্তিগত ভাষা) ✔️ —
স্বাতী ✔️ —
সুইডিশ ✔️ —
তাজিক ✔️ —
তামিল ✔️ ✔️
তেলুগু ✔️ ✔️
থাই ✔️ —
তিগ্রিনিয়া ✔️ —
তোস্ক আলবেনিয়ান ✔️ —
তুর্কি ✔️ ✔️
উইঘুর ✔️ —
ভিয়েতনামী ✔️ ✔️

সমর্থিত মডেল

মডেল একক বক্তা মাল্টি-স্পিকার ভয়েস ডিজাইন কণ্ঠস্বর প্রতিলিপি
জেমিনি ৩.৮ ফ্ল্যাশ টিটিএস ( gemini-3.8-flash-tts ) ✔️ ✔️ ✔️ ✔️
জেমিনি ৩.৮ ফ্ল্যাশ-লাইট টিটিএস ( gemini-3.8-flash-lite-tts ) ✔️ ✔️ ✔️ ✔️
জেমিনি ৩.১ ফ্ল্যাশ টিটিএস প্রিভিউ ✔️ ✔️ — —
জেমিনি ২.৫ প্রো প্রিভিউ টিটিএস ✔️ ✔️ — —

কখন কোন মডেল ব্যবহার করবেন

Gemini 3.8 TTS-এর উভয় মডেলেই হুবহু একই API স্কিমা এবং প্রম্পটিং ফরম্যাট রয়েছে, যার ফলে আপনি একটিমাত্র প্যারামিটার পরিবর্তনের মাধ্যমেই এগুলোর মধ্যে অদলবদল করতে পারেন:

  • যখন সর্বোচ্চ অ্যাকোস্টিক ফিডেলিটি, সূক্ষ্ম অভিনয় এবং অভিব্যক্তিপূর্ণ নিয়ন্ত্রণ সবচেয়ে গুরুত্বপূর্ণ, তখন Gemini 3.8 Flash TTS ( gemini-3.8-flash-tts ) ব্যবহার করুন। এটি স্টুডিও-গ্রেডের সৃজনশীল কাজ, জটিল একাধিক বক্তার সংলাপ, জোরালো ভোকাল-বার্স্ট ট্যাগ, কঠিন উচ্চারণ, আঞ্চলিক বা সংখ্যালঘু উপভাষা এবং দীর্ঘ বর্ণনার জন্য আদর্শ, যেগুলোর জন্য অটল কণ্ঠস্বর ও রুম-টোন স্থিতিশীলতা প্রয়োজন।
  • gemini-3.1-flash-tts-preview এর দ্রুত, সাশ্রয়ী এবং নির্ভরযোগ্য বিকল্প হিসেবে Gemini 3.8 Flash-Lite TTS ( gemini-3.8-flash-lite-tts ) ব্যবহার করুন । এটি উচ্চ-পরিমাণে ব্যাপক উৎপাদন, কথোপকথনমূলক ভয়েস এজেন্ট ক্যাসকেড, উচ্চস্বরে পাঠের বৈশিষ্ট্য, নির্ভরযোগ্য ভয়েস রেপ্লিকেশন এবং প্রধান ভাষাগুলোতে দৈনন্দিন একক-বক্তার কথোপকথনের জন্য অপ্টিমাইজ করা হয়েছে।

অভিবাসন নির্দেশিকা

পূর্ববর্তী প্রিভিউ মডেল ( gemini-3.1-flash-tts-preview বা gemini-2.5-pro-preview-tts ) থেকে Gemini 3.8 TTS ( gemini-3.8-flash-tts বা gemini-3.8-flash-lite-tts )-এ আপগ্রেড করার সময়, এই পাঁচটি মূল পরিবর্তন পর্যালোচনা করুন:

  1. ট্রান্সক্রিপ্ট থেকে স্টাইল আলাদা করুন: দীর্ঘস্থায়ী অভিনয়, কণ্ঠস্বর, স্বরপ্রক্ষেপণ এবং গতির নির্দেশাবলী (যেমন "whispering" , "out of breath" বা "speaking slowly" ) সাধারণ টেক্সট থেকে সরিয়ে speech_metadata.style ফাইলে রাখুন। text হুবহু ট্রান্সক্রিপ্ট এবং ইনলাইন ভোকাল ট্যাগ হিসেবে রাখুন।
  2. ভয়েস ডিজাইন ব্যবহার করে শুরুতেই পারসোনা ডিজাইন করুন: একাধিক অনুচ্ছেদযুক্ত "Audio Profile" বা "Director's Notes" ব্লকগুলিকে ভয়েস ডিজাইনে তৈরি একটি কাস্টম ভয়েস দিয়ে প্রতিস্থাপন করুন, তারপর ন্যূনতম বা খালি style স্ট্রিং ব্যবহার করে আপনার টিটিএস অনুরোধগুলিতে সেই voice_... আইডিটি প্রয়োগ করুন।
  3. কাঠামোগত সংলাপের পালা ব্যবহার করুন: একাধিক বক্তার সংলাপের ক্ষেত্রে, একটি একক টেক্সট ব্লকের মধ্যে Speaker: ... প্রিফিক্স এম্বেড করার পরিবর্তে speech_metadata.speaker ব্যবহার করে প্রতি বক্তার পালার জন্য একটি part পাস করুন।
  4. ইনলাইন ভোকাল ট্যাগের জন্য অ্যাঙ্গেল ব্র্যাকেট ব্যবহার করুন: কোনো নির্দিষ্ট মুহূর্তের মানুষের কণ্ঠস্বর এবং বিরতির জন্য অ্যাঙ্গেল ব্র্যাকেট ( <laugh> , <sigh> , <cough> , <breath> , <short pause> ) ব্যবহার করুন। কণ্ঠস্বর-বহির্ভূত সাউন্ড-ইফেক্ট ট্যাগ (যেমন হাততালি বা ধপাস শব্দ) পরিহার করুন।
  5. ইউনারি রিকোয়েস্টের ক্ষেত্রে ডিফল্ট WAV ( AUDIO_WAV ) আউটপুটের বিষয়টি বিবেচনা করুন: gemini-3.1-flash-tts-preview (যা ডিফল্টভাবে হেডারবিহীন র PCM AUDIO_L16 রিটার্ন করত) থেকে ভিন্ন, Gemini 3.8 TTS মডেলগুলো ইউনারি রিকোয়েস্টের ক্ষেত্রে একটি RIFF হেডারসহ সম্পূর্ণ WAV ( AUDIO_WAV ) অডিও (24 kHz, মোনো, 16-বিট PCM) রিটার্ন করে।
    • যদি আপনার কোড আগে সরাসরি PCM বাইটগুলোকে একটি WAV হেডারে মুড়ে দিয়ে থাকে (উদাহরণস্বরূপ, পাইথনের wave মডিউল বা নোডের wav প্যাকেজ ব্যবহার করে), তাহলে ম্যানুয়াল হেডার র‍্যাপারটি সরিয়ে ফেলুন এবং ডিকোড করা অডিও বাইটগুলো সরাসরি একটি .wav ফাইলে লিখুন।
    • আপনার বিদ্যমান পাইপলাইনে যদি হেডারবিহীন র PCM, mu-law, বা A-law অডিওর প্রয়োজন হয়, তাহলে স্পষ্টভাবে response_format.audio.mime_type "AUDIO_L16" , "AUDIO_MULAW" , বা "AUDIO_ALAW" তে সেট করুন (উদাহরণস্বরূপ, generateContent {"response_format": {"audio": {"mime_type": "AUDIO_L16"}}} , অথবা Interactions API-তে {"response_format": {"type": "audio", "mime_type": "audio/l16"}} )। অডিও আউটপুট ফরম্যাটগুলো দেখুন।

প্রম্পটিং গাইড

জেমিনি ৩.৮ টিটিএস মডেলগুলো ইনপুট টেক্সটকে কঠোরভাবে একটি হুবহু প্রতিলিপি হিসেবে বিবেচনা করে। পূর্ববর্তী প্রিভিউ মডেলগুলোর মতো নয়, যেখানে মঞ্চ নির্দেশনাগুলো সাধারণ টেক্সটের মধ্যে এমবেড করা থাকতো, জেমিনি ৩.৮ টিটিএস ধারাবাহিক টার্ন-লেভেল নির্দেশনা ( speech_metadata ) এবং নির্দিষ্ট সময়ের ইনলাইন ভোকাল ট্যাগগুলোকে আলাদা করে।

স্টাইল ফিল্ড বনাম ইনলাইন ট্যাগ

আপনার কর্মসম্পাদন নির্দেশাবলী পরিধি অনুসারে ভাগ করুন:

  • পালা-ভিত্তিক বাচনভঙ্গি ( speech_metadata.style ): বাচনভঙ্গির ধারাবাহিক বৈশিষ্ট্যগুলো—যেমন আবেগ, স্বরভঙ্গি, সামগ্রিক গতি, বা বাচনভঙ্গি (যেমন "whispering" , "out of breath" , "muttering" , বা "sarcastic" )— speech_metadata এর style ফিল্ডে রাখুন। বিভিন্ন পালা জুড়ে একটি স্থিতিশীল চরিত্র এবং পারফরম্যান্স তৈরি করতে, ভয়েস ডিজাইনে শুরুতেই পার্সোনাটি ডিজাইন করুন এবং শুধুমাত্র পালা-ভিত্তিক ঐচ্ছিক ছোটখাটো পরিবর্তনের জন্য 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.
  • পালাভিত্তিক গতি: পুরো পালা জুড়ে কথা বলার গতি নিয়ন্ত্রণ করতে speech_metadata তে "style": "speaking rapidly" অথবা "style": "speaking slowly" সেট করুন।

স্বরবিন্যাস এবং পিচ

একটি টার্ন জুড়ে স্বরপ্রক্ষেপ, পিচ এবং স্বরভঙ্গি নিয়ন্ত্রণ করতে 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."
    • টার্ন ৩ (স্পিকার এ): "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_... তৈরি করুন, এবং তারপর আপনার টিটিএস কলগুলোতে সেই ভয়েস আইডিটি ব্যবহার করুন।
  • স্থিতিশীলতার জন্য ভয়েস রেফারেন্সের উপর নির্ভর করুন (মেটা-নির্দেশাবলী বাদ দিন): জেমিনি ৩.৮ টিটিএস মডেলগুলোকে প্রথমে অডিও রেফারেন্সের উপর ভিত্তি করে স্থির হতে প্রশিক্ষণ দেওয়া হয়। মডেলকে কণ্ঠস্বর স্থির রাখতে বলার মতো কোনো নির্দেশাবলী অন্তর্ভুক্ত করবেন না (যেমন "do not switch speaker identity" বা "maintain identical timbre" )—অতিরিক্ত প্রম্পট টেক্সট কণ্ঠস্বরের বিচ্যুতি বাড়ায়। অপ্রয়োজনীয় স্টাইল নির্দেশাবলী বাদ দিন এবং ভয়েস রেফারেন্স দ্বারা প্রদত্ত স্থিতিশীল বিন্দুর চারপাশে মডেলকে স্বাভাবিকভাবে পরিবর্তিত হতে দিন।
  • style মাধ্যমে বক্তার অপরিবর্তনীয় বৈশিষ্ট্য পরিবর্তন করার চেষ্টা করবেন না: speech_metadata.style এ বয়স, লিঙ্গ, নাম বা স্থায়ী উচ্চারণ পরিবর্তন অন্তর্ভুক্ত করা থেকে বিরত থাকুন। এর পরিবর্তে, এক্সটেন্ডেড ভয়েস লাইব্রেরি থেকে একটি আঞ্চলিক কণ্ঠস্বর বেছে নিন অথবা ভয়েস ডিজাইন ব্যবহার করে একটি তৈরি করুন।
  1. চরিত্রটি একবারই তৈরি করুন: ভয়েস ডিজাইনে আপনার চরিত্রটি তৈরি করুন অথবা এক্সটেন্ডেড ভয়েস লাইব্রেরি থেকে আপনার লক্ষ্য ভাষা ও ব্যক্তিত্বের সাথে মেলে এমন একটি আঞ্চলিক ভয়েস বেছে নিন।
  2. কথার জড়তা সহ স্বাভাবিক কথোপকথনের প্রতিলিপি লিখুন: সর্বোচ্চ স্বাভাবিকতার জন্য, text একটি বাস্তব কথোপকথনের প্রতিলিপির মতো করে লিখুন—যার মধ্যে স্বাভাবিক কথোপকথনের জড়তা এবং দ্বিধা অন্তর্ভুক্ত থাকবে (উদাহরণস্বরূপ, "Oh uh yeah I think... hm, so that's interesting" )।
  3. প্রথমে সাধারণ টিটিএস (TTS) পরীক্ষা করুন: প্রথমে একটি খালি style ফিল্ড ব্যবহার করে আপনার ট্রান্সক্রিপ্টটি তৈরি করুন—বেশিরভাগ অনুরোধের জন্য কোনো style নির্দেশনার প্রয়োজন হয় না।
  4. শুধুমাত্র ছোটখাটো পরিবর্তনের জন্য সংক্ষিপ্ত style প্রম্পট যোগ করুন: শুধুমাত্র যে টার্নগুলোতে নির্দিষ্ট ডেলিভারি সমন্বয়ের প্রয়োজন, সেগুলোর জন্য একটি সংক্ষিপ্ত style স্ট্রিং (যেমন "casual, friendly" বা "muttering, then reassuring" ) যোগ করুন, এবং যখন আপনি একটি সামঞ্জস্যপূর্ণ বেসলাইন চান, তখন টার্নজুড়ে ঠিক সেই সংক্ষিপ্ত স্ট্রিংটিই পুনরায় ব্যবহার করুন।

একাধিক পালা সংলাপ এবং ভয়েস এজেন্ট

রিয়েল-টাইম কথোপকথনমূলক ভয়েস এজেন্ট বা মাল্টি-টার্ন অ্যাপ্লিকেশন তৈরি করার সময়:

  • এলএলএম টেক্সট খণ্ডগুলো আসার সাথে সাথে প্রতি পালায় একটি করে টিটিএস কল করুন।
  • কনফিগার করা voice (পূর্ব-নির্মিত, ডিজাইন করা voice_... , অথবা প্রতিলিপিকৃত voice_... / voicekey_... ) পালাক্রমে বক্তার পরিচয় বহন করুক—প্রতি পালায় কখনও একটি দীর্ঘ চরিত্রের অবয়ব পুনরায় পাঠাবেন না।
  • প্রতি-পালা style ক্ষেত্রটি খালি রাখুন, অথবা পুরো কথোপকথনের জন্য একটি সংক্ষিপ্ত ধ্রুবক স্ট্রিং (যেমন "casual, friendly" ) পাঠান।
  • আরও জোরালো শৈলীগত নির্দেশনার সাহায্য না নিয়ে, এজেন্টের দীর্ঘ প্রতিক্রিয়াগুলোকে ছোট ছোট অংশে ভাগ করুন।

স্ট্রিমিং স্পিচ জেনারেশন

মডেল দ্বারা সংশ্লেষিত হওয়ার সময়েই আপনি তৈরি হওয়া অডিও স্ট্রিম করতে পারেন। ইউনিটারি রিকোয়েস্টের (যা একটি RIFF হেডার সহ একটি সম্পূর্ণ WAV ফাইল রিটার্ন করে) বিপরীতে, স্ট্রিমিং রিকোয়েস্ট ডিফল্টরূপে হেডারবিহীন র 16-বিট সাইনড লিটল-এন্ডিয়ান লিনিয়ার PCM ( AUDIO_L16 / audio/L16;codec=pcm;rate=24000 , 24 kHz, mono) চাঙ্ক রিটার্ন করে, ফলে কন্টেইনার হেডার ছাড়াই অডিও চাঙ্কগুলো অবিচ্ছিন্নভাবে প্লে বা কনক্যাটিনেট করা যায়:

পাইথন

from google import genai

client = genai.Client()

response_stream = client.models.generate_content_stream(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {"style": "cheerful and friendly"},
        }],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {
            "voice_config": {"voice": "Kore"}
        },
    },
)

for chunk in response_stream:
    try:
        data = chunk.candidates[0].content.parts[0].inline_data.data
        # data contains raw PCM bytes (24kHz, 1-channel, 16-bit)
    except (IndexError, AttributeError):
        pass

জাভাস্ক্রিপ্ট

import {GoogleGenAI} from '@google/genai';

async function main() {
   const ai = new GoogleGenAI({});

   const responseStream = await ai.models.generateContentStream({
      model: 'gemini-3.8-flash-tts',
      contents: [{
         role: 'user',
         parts: [{
            text: 'Have a wonderful day!',
            speechMetadata: { style: 'cheerful and friendly' },
         }],
      }],
      config: {
         responseModalities: ['AUDIO'],
         speechConfig: {
            voiceConfig: { voice: 'Kore' },
         },
      },
   });

   for await (const chunk of responseStream) {
      const data = chunk.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
      if (data) {
         const audioBuffer = Buffer.from(data, 'base64');
         // Process the audio buffer
      }
   }
}
await main();

বিশ্রাম

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash-tts:streamGenerateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "contents": [{
          "role": "user",
          "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {
              "style": "cheerful and friendly"
            }
          }]
        }],
        "generationConfig": {
          "responseModalities": ["AUDIO"],
          "speechConfig": {
            "voiceConfig": {
              "voice": "Kore"
            }
          }
        }
    }'

অডিও আউটপুট ফরম্যাট

অনুরোধটি ইউনারি নাকি স্ট্রিমিং, তার উপর নির্ভর করে জেমিনি ৩.৮ টিটিএস মডেলগুলো ভিন্ন ভিন্ন ডিফল্ট অডিও ফরম্যাট ব্যবহার করে:

  • ইউনারি রিকোয়েস্ট ( models.generate_content ): একটি RIFF হেডার সহ সম্পূর্ণ WAV ( AUDIO_WAV ) অডিও ফেরত দেয় (২৪ কিলোহার্টজ, মোনো, ১৬-বিট সাইনড লিটল-এন্ডিয়ান পিসিএম)। আপনি ম্যানুয়ালি WAV কন্টেইনার যোগ না করেই ডিকোড করা অডিও বাইটগুলো সরাসরি একটি .wav ফাইলে লিখতে পারেন।
  • স্ট্রিমিং অনুরোধ ( models.generate_content_stream / streamGenerateContent ): ডিফল্টরূপে হেডারবিহীন র' লিনিয়ার পিসিএম ( AUDIO_L16 ) চাঙ্ক (২৪ কিলোহার্টজ, মোনো, ১৬-বিট সাইনড লিটল-এন্ডিয়ান পিসিএম) রিটার্ন করে, যাতে প্রতিটি চাঙ্কে কন্টেইনার হেডার ছাড়াই চাঙ্কগুলো অবিচ্ছিন্নভাবে স্ট্রিম বা সংযুক্ত করা যায়।

আপনি generationConfig.responseFormat.audio ব্যবহার করে আউটপুট অডিও এনকোডিং এবং স্যাম্পল রেট ওভাররাইড করতে পারেন:

mimeType মান ফর্ম্যাট বর্ণনা
"AUDIO_WAV" (একক ডিফল্ট) WAV ( audio/wav ) RIFF হেডার সহ সম্পূর্ণ WAV ফাইল (২৪ কিলোহার্টজ, মোনো, ১৬-বিট পিসিএম)।
"AUDIO_L16" (স্ট্রিমিং ডিফল্ট) লিনিয়ার পিসিএম ( audio/l16 ) হেডারবিহীন র' ১৬-বিট সাইনড লিটল-এন্ডিয়ান লিনিয়ার পিসিএম। স্ট্রিমিং, কাস্টম অডিও পাইপলাইন বা একাধিক টার্নের ক্লিপ সংযুক্ত করার জন্য সর্বোত্তম।
"AUDIO_MULAW" μ-law ( audio/basic / audio/mulaw ) জি.৭১১ মাইক্রো-ল কম্প্যান্ডেড অডিও। সাধারণত উত্তর আমেরিকান এবং জাপানি টেলিফোনিতে ব্যবহৃত হয় (৮ কিলোহার্টজ)।
"AUDIO_ALAW" A-law ( audio/alaw ) জি.৭১১ এ-ল কম্প্যান্ডেড অডিও। সাধারণত ইউরোপীয় এবং আন্তর্জাতিক টেলিফোনিতে ব্যবহৃত হয় (৮ কিলোহার্টজ)।

আপনি চাইলে sampleRate ও নির্দিষ্ট করে দিতে পারেন (যেমন, 24000 , 16000 , বা 8000 Hz; ডিফল্ট মান 24000 Hz)।

নিম্নলিখিত উদাহরণটি 24 kHz-এ হেডারবিহীন র 16-বিট PCM ( AUDIO_L16 ) অনুরোধ করে:

পাইথন

from google import genai

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {"style": "cheerful and friendly"},
        }],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "response_format": {
            "audio": {
                "mime_type": "AUDIO_L16",
                "sample_rate": 24000,
            }
        },
        "speech_config": {
            "voice_config": {"voice": "Kore"}
        },
    },
)

data = response.candidates[0].content.parts[0].inline_data.data
with open("out.pcm", "wb") as f:
    f.write(data)

জাভাস্ক্রিপ্ট

import {GoogleGenAI} from '@google/genai';
import * as fs from 'node:fs';

async function main() {
   const ai = new GoogleGenAI({});

   const response = await ai.models.generateContent({
      model: 'gemini-3.8-flash-tts',
      contents: [{
         role: 'user',
         parts: [{
            text: 'Have a wonderful day!',
            speechMetadata: { style: 'cheerful and friendly' },
         }],
      }],
      config: {
         responseModalities: ['AUDIO'],
         responseFormat: {
            audio: {
               mimeType: 'AUDIO_L16',
               sampleRate: 24000,
            },
         },
         speechConfig: {
            voiceConfig: { voice: 'Kore' },
         },
      },
   });

   const data = response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data;
   const audioBuffer = Buffer.from(data, 'base64');

   fs.writeFileSync('out.pcm', audioBuffer);
}
await main();

বিশ্রাম

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash-tts:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "contents": [{
          "role": "user",
          "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {
              "style": "cheerful and friendly"
            }
          }]
        }],
        "generationConfig": {
          "responseModalities": ["AUDIO"],
          "responseFormat": {
            "audio": {
              "mimeType": "AUDIO_L16",
              "sampleRate": 24000
            }
          },
          "speechConfig": {
            "voiceConfig": {
              "voice": "Kore"
            }
          }
        }
    }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | \
          base64 --decode > out.pcm

সীমাবদ্ধতা

  • টিটিএস মডেলগুলো শুধুমাত্র টেক্সট ইনপুট গ্রহণ করে এবং শুধুমাত্র অডিও আউটপুট তৈরি করে।
  • একক-অনুরোধে একাধিক স্পিকার তৈরি ( multiSpeakerVoiceConfig ) পূর্ব-নির্মিত ভয়েস ব্যবহার করে ২ জন পর্যন্ত স্পিকারকে সমর্থন করে। একাধিক চরিত্রের সংলাপে নিজস্ব নকশার ( voice_... ) বা প্রতিলিপিকৃত ( voice_... / voicekey_... ) ভয়েস একত্রিত করতে, প্রতিটি স্পিকারের পালা আলাদাভাবে সংশ্লেষণ করুন। যেহেতু একক অনুরোধগুলি ডিফল্টরূপে একটি ৪৪-বাইট RIFF হেডার সহ audio/wav ফেরত দেয়, তাই র PCM ( AUDIO_L16 ) অনুরোধ করুন অথবা ২৪kHz PCM অডিও ফ্রেমগুলি সংযুক্ত করার আগে প্রতিটি পালা থেকে WAV হেডারটি সরিয়ে ফেলুন।
  • কাস্টম ভয়েস স্টোরেজ সীমা এবং TTL:
    • স্টেটফুল ভয়েস ( store=True , প্রম্পটেড বা রেপ্লিকেটেড): প্রতি প্রজেক্টে সর্বোচ্চ ২০০টি ভয়েস, যার টিটিএল (টাইম-টু-লিভ) ১ বছর ।
    • স্টেটলেস ভয়েস কী ( store=False , voicekey_... ): ৭-দিনের টিটিএল (টাইম-টু-লিভ)।
  • ভাষাগত কভারেজ জানতে সমর্থিত ভাষা বিভাগটি পর্যালোচনা করুন।

এরপর কী?

  • ভয়েস ডিজাইন-এর সাহায্যে স্বাভাবিক ভাষা থেকে নিজস্ব ভোকাল পারসোনা তৈরি করুন।
  • ভয়েস রেপ্লিকেশন- এর মাধ্যমে বিদ্যমান কোনো বক্তার কণ্ঠস্বর অনুকরণ করুন।
  • Gemini 3.8 Flash TTS এবং Gemini 3.8 Flash-Lite TTS মডেল পেজগুলোতে মডেলের স্পেসিফিকেশন তুলনা করুন।
  • Live API- এর মাধ্যমে ইন্টারেক্টিভ দ্বিমুখী অডিও অন্বেষণ করুন।