browser.tts

বিবরণ

সিন্থেসাইজ করা টেক্সট-টু-স্পিচ (TTS) চালাতে chrome.tts API ব্যবহার করুন। এছাড়াও, সম্পর্কিত ttsEngine API দেখুন, যা এক্সটেনশনকে স্পিচ ইঞ্জিন প্রয়োগ করার অনুমতি দেয়।

Chrome, Windows (SAPI 5 ব্যবহার করে), Mac OS X এবং ChromeOS-এ এই সুবিধা প্রদান করে, যা অপারেটিং সিস্টেমের মাধ্যমে প্রদান করা স্পিচ সিন্থেসিস সুবিধা ব্যবহার করে। সব প্ল্যাটফর্মে, ব্যবহারকারী এমন এক্সটেনশন ইনস্টল করতে পারবেন যা বিকল্প স্পিচ ইঞ্জিন হিসেবে নিজেকে রেজিস্টার করে।

অনুমতি

tts

ধারণা ও ব্যবহার

স্পিচ তৈরি করুন

কথা বলার জন্য আপনার এক্সটেনশন থেকে speak() নম্বরে কল করুন। যেমন:

browser.tts.speak('Hello, world.');

অবিলম্বে কথা বলা বন্ধ করতে, শুধু stop()-এ কল করুন:

browser.tts.stop();

আপনি এমন বিকল্প প্রদান করতে পারেন যা স্পিচের বিভিন্ন প্রপার্টি নিয়ন্ত্রণ করে, যেমন স্পিচের রেট, পিচ এবং আরও অনেক কিছু। যেমন:

browser.tts.speak('Hello, world.', {'rate': 2.0});

এছাড়াও, ভাষা নির্দিষ্ট করে দেওয়া ভাল যাতে সেই ভাষা (এবং প্রযোজ্য হলে আঞ্চলিক উপভাষা) সমর্থন করে এমন সিন্থেসাইজার বেছে নেওয়া যায়।

browser.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});

ডিফল্ট হিসেবে, speak()-কে করা প্রতিটি কল, চলমান যেকোনও স্পিচকে বাধা দেয় এবং সাথে সাথে কথা বলে। কোনও কল কোনও কিছুতে বাধা সৃষ্টি করবে কিনা তা নির্ধারণ করতে, আপনি isSpeaking()-এ কল করতে পারেন। এছাড়াও, আপনি enqueue বিকল্প ব্যবহার করে এই উচ্চারণটি উচ্চারণের সারিতে যোগ করতে পারেন, যা বর্তমান উচ্চারণ শেষ হলে বলা হবে।

browser.tts.speak('Speak this first.');
browser.tts.speak(
    'Speak this next, when the first sentence is done.', {'enqueue': true});

সব বিকল্পের সম্পূর্ণ বিবরণ tts.speak()-এ পাওয়া যাবে। সব স্পিচ ইঞ্জিনে সব বিকল্প কাজ করবে না।

সমস্যা ধরতে এবং আপনি সঠিকভাবে speak() কল করছেন কিনা তা নিশ্চিত করতে, কোনও আর্গুমেন্ট নেয় না এমন একটি কলব্যাক ফাংশন পাস করুন। কলব্যাকের মধ্যে, কোনও সমস্যা আছে কিনা তা দেখতে runtime.lastError চেক করুন।

browser.tts.speak(
  utterance,
  options,
  function() {
    if (browser.runtime.lastError) {
      console.log('Error: ' + browser.runtime.lastError.message);
    }
  }
);

ইঞ্জিন স্পিচ জেনারেট করা শুরু করার আগেই কলব্যাক সাথে সাথে ফিরে আসে। কলব্যাকের উদ্দেশ্য হল TTS API ব্যবহারের সময় সিনট্যাক্স সংক্রান্ত কোনও সমস্যা হলে আপনাকে সতর্ক করা, স্পিচ সিন্থেসাইজ ও আউটপুট করার সময় সম্ভাব্য সব সমস্যা ধরা নয়। এইসব সমস্যাও ধরতে, আপনাকে ইভেন্ট লিসেনার ব্যবহার করতে হবে, যা পরের বিভাগে বর্ণনা করা হয়েছে।

ইভেন্ট শুনুন

সিন্থেসাইজ করা স্পিচের স্ট্যাটাস সম্পর্কে আরও রিয়েল-টাইম তথ্য পেতে, speak()-এর বিকল্পে ইভেন্ট লিসনার পাস করুন, যেমন:

browser.tts.speak(
  utterance,
  {
    onEvent: function(event) {
      console.log('Event ' + event.type + ' at position ' + event.charIndex);
      if (event.type == 'error') {
        console.log('Error: ' + event.errorMessage);
      }
    }
  },
  callback
);

প্রতিটি ইভেন্টে একটি ইভেন্টের ধরন, উচ্চারণের সাথে সম্পর্কিত বর্তমান স্পিচের ক্যারেক্টার ইনডেক্স এবং ত্রুটি ইভেন্টের জন্য একটি ঐচ্ছিক ত্রুটি মেসেজ অন্তর্ভুক্ত থাকে। ইভেন্টের ধরনগুলি হল:

  • 'start': ইঞ্জিন উচ্চারণ বলা শুরু করেছে।
  • 'word': শব্দের সীমানায় পৌঁছে গেছে। বর্তমান স্পিচ পজিশন নির্ধারণ করতে event.charIndex ব্যবহার করুন।
  • 'sentence': বাক্যের সীমায় পৌঁছে গেছে। বর্তমান স্পিচ পজিশন নির্ধারণ করতে event.charIndex ব্যবহার করুন।
  • 'marker': SSML মার্কার পাওয়া গেছে। বর্তমান স্পিচ পজিশন নির্ধারণ করতে event.charIndex ব্যবহার করুন।
  • 'end': ইঞ্জিন উচ্চারণ বলা শেষ করেছে।
  • 'interrupted': speak() বা stop()-এ অন্য একটি কল আসার কারণে এই উচ্চারণটি বাধাগ্রস্ত হয়েছে এবং শেষ হয়নি।
  • 'cancelled': এই উচ্চারণটি সারিতে ছিল, কিন্তু তারপর speak() বা stop()-এ অন্য একটি কলের মাধ্যমে বাতিল করা হয়েছে এবং এটি কখনই বলা শুরু হয়নি।
  • 'error': ইঞ্জিন-নির্দিষ্ট সমস্যা হয়েছে এবং এই উচ্চারণটি বলা যাবে না। বিবরণের জন্য event.errorMessage দেখুন।

চার ধরনের ইভেন্ট—'end', 'interrupted', 'cancelled' এবং 'error'—চূড়ান্ত। এইসব ইভেন্টের মধ্যে কোনও একটি পাওয়া গেলে, এই উচ্চারণ আর বলা হবে না এবং এই উচ্চারণ থেকে কোনও নতুন ইভেন্ট পাওয়া যাবে না।

কিছু ভয়েস সব ধরনের ইভেন্ট সাপোর্ট নাও করতে পারে এবং কিছু ভয়েস কোনও ইভেন্ট নাও পাঠাতে পারে। আপনি যদি নির্দিষ্ট ইভেন্ট না পাঠানো পর্যন্ত কোনও ভয়েস ব্যবহার করতে না চান, তাহলে বিকল্প অবজেক্টের requiredEventTypes মেম্বারে আপনার প্রয়োজনীয় ইভেন্ট পাস করুন অথবা আপনার প্রয়োজনীয়তা পূরণ করে এমন ভয়েস বেছে নিতে getVoices() ব্যবহার করুন। নিচে দুটি বিকল্পের বিবরণ দেওয়া হল।

SSML মার্কআপ

এই API-তে ব্যবহৃত উচ্চারণে স্পিচ সিন্থেসিস মার্কআপ ল্যাঙ্গুয়েজ (SSML) ব্যবহার করে মার্কআপ অন্তর্ভুক্ত থাকতে পারে। আপনি SSML ব্যবহার করলে, speak()-এর প্রথম আর্গুমেন্টটি একটি সম্পূর্ণ SSML ডকুমেন্ট হতে হবে, যাতে একটি XML হেডার এবং একটি টপ-লেভেল <speak> ট্যাগ থাকবে, ডকুমেন্টের ফ্র্যাগমেন্ট নয়।

যেমন:

browser.tts.speak(
  '<?xml version="1.0"?>' +
  '<speak>' +
  '  The <emphasis>second</emphasis> ' +
  '  word of this sentence was emphasized.' +
  '</speak>'
);

সব স্পিচ ইঞ্জিনে সব SSML ট্যাগ কাজ করবে না এবং কিছু ইঞ্জিনে SSML একেবারেই কাজ নাও করতে পারে, তবে সব ইঞ্জিনকে এমন যেকোনও SSML উপেক্ষা করতে হবে যা কাজ করে না এবং এখনও অন্তর্নিহিত টেক্সট বলতে হবে।

কোনও ভয়েস বেছে নিন

ডিফল্ট হিসেবে, Chrome আপনার বলা প্রতিটি শব্দের জন্য ভাষার ভিত্তিতে সবচেয়ে উপযুক্ত ভয়েস বেছে নেয়। বেশিরভাগ Windows, Mac OS X এবং ChromeOS সিস্টেমে, অপারেটিং সিস্টেমের মাধ্যমে প্রদান করা স্পিচ সিন্থেসিস অন্তত একটি ভাষায় যেকোনও টেক্সট বলতে পারবে। তবে, কিছু ব্যবহারকারীর কাছে তাদের অপারেটিং সিস্টেম এবং অন্যান্য Chrome এক্সটেনশন দ্বারা প্রয়োগ করা স্পিচ ইঞ্জিন থেকে বিভিন্ন ধরনের ভয়েস উপলভ্য থাকতে পারে। সেইসব ক্ষেত্রে, আপনি উপযুক্ত ভয়েস বেছে নিতে বা ব্যবহারকারীকে বিকল্পের তালিকা দেখাতে কাস্টম কোড প্রয়োগ করতে পারেন।

সব ভয়েসের তালিকা পেতে, getVoices() কল করুন এবং এটিকে এমন একটি ফাংশন পাস করুন যা আর্গুমেন্ট হিসেবে TtsVoice অবজেক্টের একটি অ্যারে গ্রহণ করে:

browser.tts.getVoices(
  function(voices) {
    for (var i = 0; i < voices.length; i++) {
      console.log('Voice ' + i + ':');
      console.log('  name: ' + voices[i].voiceName);
      console.log('  lang: ' + voices[i].lang);
      console.log('  extension id: ' + voices[i].extensionId);
      console.log('  event types: ' + voices[i].eventTypes);
    }
  }
);

ধরন

EventType

Chrome 54+ Chrome 148 থেকে browser.*

Enum

"শুরু"

"শেষ"

"শব্দ"

"sentence"

"মার্কার"

"বাধাগ্রস্ত"

"বাতিল করা হয়েছে"

"error"

"পজ করুন"

"আবার চালু করো"

TtsEvent

TTS ইঞ্জিন থেকে পাওয়া একটি ইভেন্ট যা উচ্চারণের স্ট্যাটাস জানায়।

প্রপার্টি

  • charIndex

    নম্বর ঐচ্ছিক

    উচ্চারণে বর্তমান অক্ষরের ইন্ডেক্স। শব্দ ইভেন্টের ক্ষেত্রে, একটি শব্দের শেষে এবং পরবর্তী শব্দের শুরুতে ইভেন্টটি ফায়ার হয়। charIndex টেক্সটের মধ্যে এমন একটি পয়েন্টকে দেখায় যা পরবর্তী যে শব্দটি বলা হবে তার শুরুতে থাকে।

  • errorMessage

    স্ট্রিং ঐচ্ছিক

    ইভেন্টের ধরন error হলে, সমস্যার বিবরণ।

  • দৈর্ঘ্য

    নম্বর ঐচ্ছিক

    Chrome 74+ Chrome 148 থেকে browser.*

    উচ্চারণের পরবর্তী অংশের দৈর্ঘ্য। যেমন, word ইভেন্টে, এটি হল সেই শব্দের দৈর্ঘ্য যা এর পরে বলা হবে। স্পিচ ইঞ্জিন দ্বারা সেট করা না থাকলে এটি -১-এ সেট করা হবে।

  • ধরন

    টাইপটি হতে পারে start স্পিচ শুরু হওয়ার সাথে সাথে, word শব্দের সীমানায় পৌঁছালে, sentence বাক্যের সীমানায় পৌঁছালে, marker SSML মার্ক এলিমেন্টে পৌঁছালে, end উচ্চারণ শেষ হলে, interrupted উচ্চারণ শেষ হওয়ার আগে থেমে গেলে বা বাধা পেলে, cancelled সিন্থেসাইজ হওয়ার আগে কিউ থেকে সরিয়ে দেওয়া হলে অথবা error অন্য কোনও সমস্যা হলে। স্পিচ পজ করার সময়, কোনও নির্দিষ্ট উচ্চারণ মাঝপথে পজ করা হলে pause ইভেন্ট ফায়ার করা হয় এবং উচ্চারণ স্পিচ আবার চালু করলে resume ইভেন্ট ফায়ার করা হয়। মনে রাখবেন যে কথা বলার মাঝে স্পিচ পজ করা হলে, পজ ও আবার চালু করার ইভেন্ট নাও ঘটতে পারে।

TtsOptions

Chrome 77+ browser.* Chrome 148 থেকে

TTS ইঞ্জিনের জন্য স্পিচ বিকল্প।

প্রপার্টি

  • desiredEventTypes

    string[] ঐচ্ছিক

    আপনি যে ধরনের TTS ইভেন্ট শুনতে আগ্রহী। যদি না থাকে, তাহলে সব ধরনের ইভেন্ট পাঠানো হতে পারে।

  • এনকিউ করুন

    বুলিয়ান ঐচ্ছিক

    সত্য হলে, TTS আগে থেকেই প্রসেস করা হলে এই উচ্চারণটি সারিবদ্ধ করে। মিথ্যা (ডিফল্ট) হলে, বর্তমান স্পিচকে বাধা দেয় এবং এই নতুন উচ্চারণ বলার আগে স্পিচ কিউ ফ্লাশ করে।

  • extensionId

    স্ট্রিং ঐচ্ছিক

    স্পিচ ইঞ্জিনের এক্সটেনশন আইডি জানা থাকলে, সেটি ব্যবহার করুন।

  • লিঙ্গগত পরিচয়

    VoiceGender ঐচ্ছিক

    Chrome 77 থেকে বন্ধ করা হয়েছে

    লিঙ্গগত পরিচয় সংক্রান্ত তথ্য বন্ধ করা হয়েছে এবং তা উপেক্ষা করা হবে।

    সিন্থেসাইজ করা স্পিচের জন্য ভয়েসের লিঙ্গগত পরিচয়।

  • lang

    স্ট্রিং ঐচ্ছিক

    সিন্থেসিসের জন্য ব্যবহার করা ভাষা, ভাষা-অঞ্চল ফর্ম্যাটে। যেমন: 'en', 'en-US', 'en-GB', 'zh-CN'।

  • পিচ

    নম্বর ঐচ্ছিক

    কথা বলার পিচ ০ থেকে ২-এর মধ্যে হতে হবে, যেখানে ০ হল সবচেয়ে কম এবং ২ হল সবচেয়ে বেশি। ১.০ হল ভয়েসের ডিফল্ট পিচ।

  • রেট

    নম্বর ঐচ্ছিক

    এই ভয়েসের জন্য ডিফল্ট রেটের তুলনায় কথা বলার রেট। ১.০ হল ডিফল্ট রেট, সাধারণত প্রতি মিনিটে ১৮০ থেকে ২২০টি শব্দ। ২.০ হল দ্বিগুণ দ্রুত এবং ০.৫ হল অর্ধেক দ্রুত। ০.১-এর কম বা ১০.০-এর বেশি মান একেবারেই অনুমোদিত নয়, তবে অনেক ভয়েস সর্বনিম্ন এবং সর্বোচ্চ রেট আরও সীমাবদ্ধ করবে—উদাহরণস্বরূপ, আপনি ৩.০-এর বেশি মান নির্দিষ্ট করলেও একটি নির্দিষ্ট ভয়েস আসলে স্বাভাবিকের চেয়ে ৩ গুণের বেশি দ্রুত কথা বলতে পারবে না।

  • requiredEventTypes

    string[] ঐচ্ছিক

    TTS ইভেন্টের ধরন ভয়েসে কাজ করতে হবে।

  • voiceName

    স্ট্রিং ঐচ্ছিক

    সংশ্লেষণের জন্য ব্যবহার করার জন্য ভয়েসের নাম। ফাঁকা থাকলে, উপলভ্য যেকোনও ভয়েস ব্যবহার করে।

  • ভলিউম

    নম্বর ঐচ্ছিক

    কথা বলার ভলিউম ০ থেকে ১-এর মধ্যে, যেখানে ০ হল সর্বনিম্ন এবং ১ হল সর্বোচ্চ, ডিফল্ট ভলিউম ১.০।

  • onEvent

    void ঐচ্ছিক

    উচ্চারণ বলার প্রসেসে ঘটা ইভেন্টের সাথে এই ফাংশন কল করা হয়।

    onEvent ফাংশনটি দেখতে এইরকম:

    (event: TtsEvent) => {...}

    • ইভেন্ট

      টেক্সট-টু-স্পিচ ইঞ্জিন থেকে আপডেট ইভেন্ট এই উচ্চারণের স্ট্যাটাস নির্দেশ করে।

TtsVoice

স্পিচ সিন্থেসিসের জন্য উপলভ্য ভয়েসের বিবরণ।

প্রপার্টি

  • eventTypes

    EventType[] ঐচ্ছিক

    এই ভয়েস যে ধরনের কলব্যাক ইভেন্ট পাঠাতে পারে তার সবকটি।

  • extensionId

    স্ট্রিং ঐচ্ছিক

    এই ভয়েস প্রদানকারী এক্সটেনশনের আইডি।

  • লিঙ্গগত পরিচয়

    VoiceGender ঐচ্ছিক

    Chrome 70 থেকে বন্ধ করা হয়েছে

    লিঙ্গগত পরিচয় সংক্রান্ত তথ্য বন্ধ করা হয়েছে এবং তা উপেক্ষা করা হবে।

    এই ভয়েসের লিঙ্গগত পরিচয়।

  • lang

    স্ট্রিং ঐচ্ছিক

    এই ভয়েস যে ভাষা সাপোর্ট করে, সেটি ভাষা-অঞ্চল ফর্ম্যাটে দেখানো হয়। যেমন: 'en', 'en-US', 'en-GB', 'zh-CN'।

  • রিমোট

    বুলিয়ান ঐচ্ছিক

    সত্য হলে, সিন্থেসিস ইঞ্জিন হল একটি রিমোট নেটওয়ার্ক রিসোর্স। এতে লেটেন্সি বেশি হতে পারে এবং ব্যান্ডউইথ খরচ হতে পারে।

  • voiceName

    স্ট্রিং ঐচ্ছিক

    ভয়েসের নাম।

VoiceGender

Chrome 54+ Chrome 148 থেকে browser.* Chrome 70 থেকে বন্ধ করা হয়েছে

লিঙ্গগত পরিচয় সংক্রান্ত তথ্য বন্ধ করা হয়েছে এবং এটি উপেক্ষা করা হয়।

Enum

"পুরুষ"

"মহিলা"

পদ্ধতি

getVoices()

browser.tts.getVoices(): Promise<TtsVoice[]>

উপলভ্য সব ভয়েসের অ্যারে পাওয়া যায়।

রিটার্ন

  • প্রতিশ্রুতি<TtsVoice[]>

    Chrome 101+ Chrome 148 থেকে browser.*

isSpeaking()

browser.tts.isSpeaking(): Promise<boolean>

ইঞ্জিন বর্তমানে কথা বলছে কিনা তা চেক করে। Mac OS X-এ, সিস্টেম স্পিচ ইঞ্জিন কথা বললেই ফলাফল সত্য হয়, এমনকি Chrome-এর মাধ্যমে স্পিচ শুরু না হলেও।

রিটার্ন

  • Promise<boolean>

    Chrome 101+ Chrome 148 থেকে browser.*

pause()

browser.tts.pause(): void

স্পিচ সিন্থেসিস পজ করে, সম্ভবত কোনও উচ্চারণ চলাকালীন। আবার চালু বা বন্ধ করার জন্য কল করলে স্পিচ আন-পজ হয়ে যাবে।

resume()

browser.tts.resume(): void

স্পিচ পজ করা থাকলে, যেখানে পজ করা হয়েছিল সেখান থেকে আবার শুরু করে।

speak()

browser.tts.speak(
  utterance: string,
  options?: TtsOptions,
)
: Promise<void>

টেক্সট-টু-স্পিচ ইঞ্জিন ব্যবহার করে টেক্সট পড়ে শোনায়।

প্যারামিটারগুলি

  • উচ্চারণ

    স্ট্রিং

    যে টেক্সট বলতে হবে, সেটি প্লেন টেক্সট বা সম্পূর্ণ, সঠিকভাবে ফর্ম্যাট করা SSML ডকুমেন্ট হতে পারে। SSML কাজ করে না এমন স্পিচ ইঞ্জিন ট্যাগগুলি সরিয়ে দেবে এবং টেক্সটটি বলবে। টেক্সটের সর্বাধিক দৈর্ঘ্য হল ৩২,৭৬৮টি অক্ষর।

  • বিকল্প

    TtsOptions ঐচ্ছিক

    স্পিচ সংক্রান্ত বিকল্প।

রিটার্ন

  • <void> প্রমিস

    Chrome 101+ Chrome 148 থেকে browser.*

    বক্তব্য শেষ হওয়ার আগেই, সাথে সাথে সমাধান করে। কোনও সমস্যা হলে, প্রমিস বাতিল করা হবে। আরও বিস্তারিত মতামত পেতে options.onEvent ব্যবহার করুন।

stop()

browser.tts.stop(): void

বর্তমানে চলছে এমন যেকোনও স্পিচ বন্ধ করে এবং পেন্ডিং থাকা যেকোনও উচ্চারণের সারি ফ্লাশ করে। এছাড়াও, স্পিচ পজ করা থাকলে, পরবর্তী কল করার জন্য এটি এখন আন-পজ করা হবে।

ইভেন্ট

onVoicesChanged

Chrome 124+ Chrome 148 থেকে browser.*
browser.tts.onVoicesChanged.addListener(
  callback: function,
)

getVoices-এর মাধ্যমে ফেরত পাঠানো tts.TtsVoice-এর তালিকা পরিবর্তন করা হলে কল করা হয়।

প্যারামিটারগুলি

  • কলব্যাক

    ফাংশন

    callback প্যারামিটারটি দেখতে এইরকম:

    () => void