বর্ণনা
একটি এক্সটেনশন ব্যবহার করে টেক্সট-টু-স্পিচ (TTS) ইঞ্জিন বাস্তবায়ন করতে chrome.ttsEngine API ব্যবহার করুন। যদি আপনার এক্সটেনশনটি এই API ব্যবহার করে রেজিস্টার করে, তবে যখন কোনো এক্সটেনশন বা ক্রোম অ্যাপ স্পিচ তৈরি করার জন্য tts API ব্যবহার করবে, তখন এটি বলার জন্য একটি উক্তি এবং অন্যান্য প্যারামিটার সম্বলিত ইভেন্ট পাবে। এরপর আপনার এক্সটেনশনটি স্পিচটি সংশ্লেষণ ও আউটপুট করার জন্য যেকোনো উপলব্ধ ওয়েব প্রযুক্তি ব্যবহার করতে পারবে এবং স্ট্যাটাস জানানোর জন্য কলিং ফাংশনে ইভেন্ট ফেরত পাঠাতে পারবে।
অনুমতি
ttsEngineসংক্ষিপ্ত বিবরণ
একটি এক্সটেনশন নিজেকে স্পিচ ইঞ্জিন হিসেবে নিবন্ধন করতে পারে। এর মাধ্যমে, এটি tts.speak এবং tts.stop এর মতো ফাংশনগুলোর কিছু বা সমস্ত কলকে বাধা দিতে পারে এবং একটি বিকল্প বাস্তবায়ন প্রদান করতে পারে। স্পিচ প্রদানের জন্য এক্সটেনশনগুলো যেকোনো উপলব্ধ ওয়েব প্রযুক্তি ব্যবহার করতে পারে, যার মধ্যে সার্ভার থেকে স্ট্রিমিং অডিও এবং HTML5 অডিও অন্তর্ভুক্ত। একটি এক্সটেনশন এমনকি উচ্চারিত কথাগুলো দিয়ে ভিন্ন কিছুও করতে পারে, যেমন একটি পপ-আপ উইন্ডোতে ক্লোজড ক্যাপশন প্রদর্শন করা অথবা সেগুলোকে একটি রিমোট সার্ভারে লগ মেসেজ হিসেবে পাঠানো।
প্রকাশ
একটি টিটিএস ইঞ্জিন প্রয়োগ করতে, একটি এক্সটেনশনকে অবশ্যই 'ttsEngine' পারমিশনটি ঘোষণা করতে হবে এবং তারপরে এক্সটেনশন ম্যানিফেস্টে এটি দ্বারা সরবরাহ করা সমস্ত ভয়েস ঘোষণা করতে হবে, এইভাবে:
{
"name": "My TTS Engine",
"version": "1.0",
"permissions": ["ttsEngine"],
"tts_engine": {
"voices": [
{
"voice_name": "Alice",
"lang": "en-US",
"event_types": ["start", "marker", "end"]
},
{
"voice_name": "Pat",
"lang": "en-US",
"event_types": ["end"]
}
]
},
"background": {
"page": "background.html",
"persistent": false
}
}
একটি এক্সটেনশন যেকোনো সংখ্যক ভয়েস নির্দিষ্ট করতে পারে।
` voice_name প্যারামিটারটি আবশ্যক। নামটি এমন বর্ণনামূলক হওয়া উচিত যা থেকে ভয়েসের নাম এবং ব্যবহৃত ইঞ্জিনটি শনাক্ত করা যায়। যদি কোনো বিরল পরিস্থিতিতে দুটি এক্সটেনশন একই নামের ভয়েস রেজিস্টার করে, তবে ক্লায়েন্ট সেই এক্সটেনশনের আইডি উল্লেখ করতে পারে যেটি সিন্থেসিস করবে।
lang প্যারামিটারটি ঐচ্ছিক, তবে এটি ব্যবহার করার জন্য জোরালোভাবে সুপারিশ করা হয়। প্রায় সবসময়ই, একটি ভয়েস শুধুমাত্র একটি ভাষাতেই কথা বলতে পারে। যখন একটি ইঞ্জিন একাধিক ভাষা সমর্থন করে, তখন এটি সহজেই প্রতিটি ভাষার জন্য একটি পৃথক ভয়েস রেজিস্টার করতে পারে। বিরল পরিস্থিতিতে যেখানে একটিমাত্র ভয়েস একাধিক ভাষা পরিচালনা করতে পারে, সেখানে দুটি পৃথক ভয়েস তালিকাভুক্ত করা এবং অভ্যন্তরীণভাবে একই লজিক ব্যবহার করে সেগুলোকে পরিচালনা করাই সবচেয়ে সহজ। তবে, আপনি যদি এমন একটি ভয়েস তৈরি করতে চান যা যেকোনো ভাষায় কথা বলতে পারবে, তাহলে আপনার এক্সটেনশনের ম্যানিফেস্ট থেকে lang প্যারামিটারটি বাদ দিন।
অবশেষে, স্পিচ সিন্থেসিসের অগ্রগতি সম্পর্কে ক্লায়েন্টকে আপডেট করার জন্য ইঞ্জিন যদি ইভেন্ট পাঠাতে পারে, তবে event_types প্যারামিটারটি আবশ্যক। ন্যূনতমপক্ষে, স্পিচ কখন শেষ হয়েছে তা বোঝানোর জন্য 'end' ইভেন্ট টাইপটি সমর্থন করার জন্য জোরালোভাবে সুপারিশ করা হয়, অন্যথায় Chrome কিউতে থাকা উচ্চারণগুলো শিডিউল করতে পারে না।
একবার লোড হয়ে গেলে, একটি এক্সটেনশন chrome.ttsEngine.updateVoices কল করার মাধ্যমে ঘোষিত ভয়েসগুলির তালিকা প্রতিস্থাপন করতে পারে। (উল্লেখ্য যে, updateVoices এর প্রোগ্রাম্যাটিক কলে ব্যবহৃত প্যারামিটারগুলি ক্যামেল কেসে থাকে: যেমন, voiceName , যা ম্যানিফেস্ট ফাইলের থেকে ভিন্ন, কারণ ম্যানিফেস্ট ফাইলে voice_name ব্যবহৃত হয়।)
আপনি যে সম্ভাব্য ইভেন্টের ধরনগুলো পাঠাতে পারেন, সেগুলো speak() মেথড দ্বারা গৃহীত ইভেন্টের ধরনগুলোর সাথে সামঞ্জস্যপূর্ণ:
-
'start': ইঞ্জিনটি কথা বলতে শুরু করেছে। -
'word': একটি শব্দ সীমানায় পৌঁছানো গেছে। বর্তমান স্পিচ পজিশন নির্ধারণ করতেevent.charIndexব্যবহার করুন। -
'sentence': বাক্যের সীমানায় পৌঁছানো গেছে। বর্তমান স্পিচ পজিশন নির্ধারণ করতেevent.charIndexব্যবহার করুন। -
'marker': একটি SSML মার্কারে পৌঁছানো হয়েছে। বর্তমান স্পিচ পজিশন নির্ধারণ করতেevent.charIndexব্যবহার করুন। -
'end': ইঞ্জিনটি তার বক্তব্য শেষ করেছে। -
'error': ইঞ্জিন-নির্দিষ্ট একটি ত্রুটি ঘটেছে এবং এই উক্তিটি বলা সম্ভব নয়।event.errorMessageএ আরও তথ্য দিন।
'interrupted' এবং 'cancelled' ইভেন্টগুলো স্পিচ ইঞ্জিন পাঠায় না; এগুলো ক্রোম স্বয়ংক্রিয়ভাবে তৈরি করে।
যদি আপনি নিচে বর্ণিত পদ্ধতি অনুযায়ী স্পিচ ইভেন্ট লিসেনার রেজিস্টার করে থাকেন, তবে টেক্সট-টু-স্পিচ ক্লায়েন্টরা tts.getVoices কল করার মাধ্যমে আপনার এক্সটেনশনের ম্যানিফেস্ট থেকে ভয়েসের তথ্য পেতে পারে।
বক্তৃতা ইভেন্ট পরিচালনা
ক্লায়েন্টদের অনুরোধে স্পিচ তৈরি করতে, আপনার এক্সটেনশনকে অবশ্যই onSpeak এবং onStop উভয়ের জন্য লিসেনার রেজিস্টার করতে হবে, এইভাবে:
const speakListener = (utterance, options, sendTtsEvent) => {
sendTtsEvent({type: 'start', charIndex: 0})
// (start speaking)
sendTtsEvent({type: 'end', charIndex: utterance.length})
};
const stopListener = () => {
// (stop all speech)
};
chrome.ttsEngine.onSpeak.addListener(speakListener);
chrome.ttsEngine.onStop.addListener(stopListener);
কোনো একটি নির্দিষ্ট স্পিচ রিকোয়েস্ট কোনো এক্সটেনশনে পাঠানো হবে কি না, সেই সিদ্ধান্তটি সম্পূর্ণরূপে নির্ভর করে এক্সটেনশনটি তার ম্যানিফেস্টে প্রদত্ত ভয়েস প্যারামিটারগুলো সমর্থন করে কি না এবং onSpeak ও onStop জন্য লিসেনার রেজিস্টার করেছে কি না, তার উপর। অন্য কথায়, কোনো এক্সটেনশনের পক্ষে একটি স্পিচ রিকোয়েস্ট গ্রহণ করে সেটিকে গ্রহণ করবে কি না, তা গতিশীলভাবে সিদ্ধান্ত নেওয়ার কোনো উপায় নেই।
প্রকারভেদ
AudioBuffer
প্যারামিটারসমূহে একটি অডিও বাফার এবং সংশ্লিষ্ট ডেটা থাকে।
বৈশিষ্ট্য
- অডিওবাফার
অ্যারেবাফার
টেক্সট-টু-স্পিচ ইঞ্জিন থেকে আসা অডিও বাফার। এর দৈর্ঘ্য অবশ্যই audioStreamOptions.bufferSize-এর সমান হতে হবে এবং audioStreamOptions.sampleRate অনুযায়ী এটিকে মোনো (mono) ফরম্যাটে ও লিনিয়ার পিসিএম (linear pcm) ৩২-বিট সাইনড ফ্লোট (signed float) হিসেবে এনকোড করতে হবে, অর্থাৎ জাভাস্ক্রিপ্টের Float32Array টাইপের হতে হবে।
- অক্ষর সূচক
সংখ্যা ঐচ্ছিক
এই অডিও বাফারের সাথে সংশ্লিষ্ট ক্যারেক্টার ইনডেক্স।
- isLastBuffer
বুলিয়ান ঐচ্ছিক
যদি এই অডিও বাফারটি কথিত টেক্সটের জন্য সর্বশেষ হয়, তবে এটি সত্য হবে।
AudioStreamOptions
এতে ইঞ্জিন দ্বারা উৎপাদিতব্য অডিও স্ট্রিম ফরম্যাটটি রয়েছে।
বৈশিষ্ট্য
- বাফার সাইজ
সংখ্যা
একটি অডিও বাফারের মধ্যে থাকা স্যাম্পলের সংখ্যা।
- নমুনা হার
সংখ্যা
একটি অডিও বাফারে প্রত্যাশিত স্যাম্পল রেট।
LanguageInstallStatus
একটি ভয়েসের ইনস্টল স্ট্যাটাস।
এনাম
"ইনস্টল করা হয়নি" "ইনস্টল করা" "ইনস্টল করা" "ব্যর্থ"
LanguageStatus
একটি ভাষার ইনস্টলেশনের অবস্থা।
বৈশিষ্ট্য
- ত্রুটি
স্ট্রিং ঐচ্ছিক
ইনস্টলেশন ব্যর্থতার বিবরণ। ভাষাটি ইনস্টল করতে ব্যর্থ হলে এটি ঐচ্ছিকভাবে পূরণ করা হয়।
- ইনস্টলস্ট্যাটাস
ইনস্টলেশনের অবস্থা।
- ভাষা
স্ট্রিং
ভাষা কোড-অঞ্চল কোড আকারে ভাষার স্ট্রিং, যেখানে অঞ্চলটি বাদ দেওয়া যেতে পারে। উদাহরণস্বরূপ, en, en-AU, zh-CH।
LanguageUninstallOptions
নির্দিষ্ট ভাষা আনইনস্টল করার বিকল্পসমূহ।
বৈশিষ্ট্য
- অবিলম্বে আনইনস্টল করুন
বুলিয়ান
যদি টিটিএস ক্লায়েন্ট ভাষাটি অবিলম্বে আনইনস্টল করতে চায়, তবে এটি 'ট্রু' হবে। এই প্যারামিটার এবং অনুরোধকারীর তথ্যের উপর ভিত্তি করে, ইঞ্জিনটি ভাষাটি আনইনস্টল করবে কি না বা কখন করবে, তা বেছে নিতে পারে। যদি 'ফলস' হয়, তবে কখন আনইনস্টল করতে হবে তা নির্ধারণ করার জন্য এটি সাম্প্রতিক ব্যবহারের মতো অন্যান্য মানদণ্ড ব্যবহার করতে পারে।
SpeakOptions
tts.speak() মেথডের জন্য নির্দিষ্ট অপশনসমূহ।
বৈশিষ্ট্য
- লিঙ্গ
কণ্ঠস্বর (লিঙ্গ ঐচ্ছিক)
ক্রোম ৯২ থেকে বাতিল করা হয়েছেলিঙ্গ পরিচয় অপ্রচলিত এবং তা উপেক্ষা করা হবে।
সংশ্লেষিত বক্তৃতার কণ্ঠস্বরের লিঙ্গ।
- ভাষা
স্ট্রিং ঐচ্ছিক
সংশ্লেষণের জন্য ব্যবহৃত ভাষা, যা ভাষা - অঞ্চল আকারে থাকে। উদাহরণ: 'en', 'en-US', 'en-GB', 'zh-CN'।
- পিচ
সংখ্যা ঐচ্ছিক
কথা বলার স্বর ০ থেকে ২-এর মধ্যে, যেখানে ০ হলো সর্বনিম্ন এবং ২ হলো সর্বোচ্চ। ১.০ এই কণ্ঠস্বরের স্বাভাবিক স্বর।
- হার
সংখ্যা ঐচ্ছিক
এই ভয়েসের ডিফল্ট রেটের সাপেক্ষে কথা বলার গতি। ১.০ হলো ডিফল্ট রেট, যা সাধারণত প্রতি মিনিটে প্রায় ১৮০ থেকে ২২০ শব্দের মধ্যে থাকে। ২.০ হলো এর দ্বিগুণ গতি, এবং ০.৫ হলো এর অর্ধেক গতি। এই মানটি ০.১ থেকে ১০.০-এর মধ্যে থাকবে বলে নিশ্চিত করা হয়েছে। যখন কোনো ভয়েস রেটের এই সম্পূর্ণ পরিসর সমর্থন করে না, তখন কোনো এরর দেখাবেন না। এর পরিবর্তে, ভয়েসটি যে পরিসর সমর্থন করে, সেই অনুযায়ী রেটটি ছেঁটে ফেলুন।
- ভয়েসনেম
স্ট্রিং ঐচ্ছিক
সিন্থেসিসের জন্য যে ভয়েসটি ব্যবহার করতে হবে তার নাম।
- ভলিউম
সংখ্যা ঐচ্ছিক
কথা বলার ভলিউম ০ থেকে ১ এর মধ্যে, যেখানে ০ হলো সর্বনিম্ন এবং ১ হলো সর্বোচ্চ, এবং এর ডিফল্ট মান হলো ১.০।
TtsClient
অবস্থা জানতে অনুরোধকারী ক্লায়েন্টের শনাক্তকারী।
বৈশিষ্ট্য
- আইডি
স্ট্রিং
ক্লায়েন্ট ভাষা ব্যবস্থাপনার জন্য অনুরোধ করছেন। কোনো এক্সটেনশনের ক্ষেত্রে, এটি হলো অনন্য এক্সটেনশন আইডি। ক্রোম ফিচারের ক্ষেত্রে, এটি হলো ফিচারটির পাঠযোগ্য নাম।
অনুরোধকারীর ধরণ।
TtsClientSource
অনুরোধকারীর ধরণ।
এনাম
"ক্রোমফিচার" "সম্প্রসারণ"
VoiceGender
লিঙ্গ পরিচয় অপ্রচলিত এবং তা উপেক্ষা করা হবে।
এনাম
"পুরুষ" "মহিলা"
পদ্ধতি
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
): void
যখন কোনো ভাষা ইনস্টল করার চেষ্টা করা হয় এবং যখন কোনো ভাষা আনইনস্টল করা হয়, তখন ইঞ্জিন দ্বারা এটি কল করা হয়। এছাড়াও, কোনো ক্লায়েন্টের স্ট্যাটাস অনুরোধের জবাবেও এটি কল করা হয়। যখন কোনো ভয়েস ইনস্টল বা আনইনস্টল করা হয়, তখন ভয়েসটি রেজিস্টার করার জন্য ইঞ্জিনের ttsEngine.updateVoices-ও কল করা উচিত।
প্যারামিটার
- অবস্থা
ভাষাটির ইনস্টলেশনের অবস্থা।
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
): void
কোনো ইঞ্জিন তার ভয়েসের তালিকা আপডেট করার জন্য এটিকে ডাকে। এই তালিকাটি এই এক্সটেনশনের ম্যানিফেস্টে ঘোষিত যেকোনো ভয়েসকে বাতিল করে দেয়।
প্যারামিটার
- কণ্ঠস্বর
TtsVoice []
স্পিচ সিন্থেসিসের জন্য উপলব্ধ ভয়েসগুলোকে প্রতিনিধিত্বকারী
tts.TtsVoiceঅবজেক্টের অ্যারে।
ইভেন্টগুলি
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
যখন কোনো টিটিএস ক্লায়েন্ট একটি নতুন ভাষা ইনস্টল করার অনুরোধ করে, তখন এটি সক্রিয় হয়। ইঞ্জিনটির উচিত ভাষাটি ডাউনলোড ও ইনস্টল করার চেষ্টা করা এবং প্রাপ্ত ফলাফলসহ ttsEngine.updateLanguage ফাংশনটিকে কল করা। সফল হলে, ইঞ্জিনটির উচিত নতুন উপলব্ধ ভয়েসগুলো রেজিস্টার করার জন্য ttsEngine.updateVoices ফাংশনটিকেও কল করা।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(requestor: TtsClient, lang: string) => void
- অনুরোধকারী
- ভাষা
স্ট্রিং
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
যখন কোনো টিটিএস ক্লায়েন্ট কোনো ভাষার ইনস্টল স্ট্যাটাস জানতে চায়, তখন এটি ট্রিগার হয়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(requestor: TtsClient, lang: string) => void
- অনুরোধকারী
- ভাষা
স্ট্রিং
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
ঐচ্ছিক: যদি কোনো ইঞ্জিন পজ ইভেন্ট সমর্থন করে, তবে এটি একটি রিজুম ইভেন্ট বা স্টপ ইভেন্ট না পাওয়া পর্যন্ত বর্তমানে বলা কথাটি (যদি থাকে) থামিয়ে রাখবে। উল্লেখ্য যে, একটি স্টপ ইভেন্ট পজ করা অবস্থাটিও পরিষ্কার করে দেবে।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
ঐচ্ছিক: যদি কোনো ইঞ্জিন পজ ইভেন্ট সমর্থন করে, তবে চলমান উক্তিটি (যদি থাকে) পুনরায় বলা শুরু করার জন্য এটির রিজুম ইভেন্টও সমর্থন করা উচিত। উল্লেখ্য যে, একটি স্টপ ইভেন্টও পজ করা অবস্থাটি দূর করে দেবে।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
যখন ব্যবহারকারী tts.speak() কল করেন এবং এই এক্সটেনশনের ম্যানিফেস্টের ভয়েসগুলোর মধ্যে কোনো একটি অপশনস অবজেক্টের সাথে প্রথমে মিলে যায়, তখন এটি কল করা হয়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
- উচ্চারণ
স্ট্রিং
- বিকল্পগুলি
- sendTtsEvent
ফাংশন
sendTtsEventপ্যারামিটারটি দেখতে এইরকম:(event: tts.TtsEvent) => void
- অনুষ্ঠান
টেক্সট-টু-স্পিচ ইঞ্জিন থেকে প্রাপ্ত ইভেন্টটি এই উক্তিটির অবস্থা নির্দেশ করে।
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
যখন ব্যবহারকারী tts.speak() কল করেন এবং এই এক্সটেনশনের ম্যানিফেস্টের ভয়েসগুলোর মধ্যে কোনো একটি অপশনস অবজেক্টের সাথে প্রথমে মিলে যায়, তখন এটি কল করা হয়। এটি ttsEngine.onSpeak থেকে ভিন্ন, কারণ Chrome অডিও প্লেব্যাক পরিষেবা প্রদান করে এবং tts ইভেন্টগুলো প্রেরণের বিষয়টি পরিচালনা করে।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
- উচ্চারণ
স্ট্রিং
- বিকল্পগুলি
- অডিওস্ট্রিমঅপশন
- sendTtsAudio
ফাংশন
sendTtsAudioপ্যারামিটারটি দেখতে এইরকম:(audioBufferParams: AudioBuffer) => void
- অডিওবাফারপ্যারামস
প্যারামিটারসমূহে একটি অডিও বাফার এবং সংশ্লিষ্ট ডেটা থাকে।
- sendError
ফাংশন
ক্রোম ৯৪+sendErrorপ্যারামিটারটি দেখতে এইরকম:(errorMessage?: string) => void
- ত্রুটির বার্তা
স্ট্রিং ঐচ্ছিক
ত্রুটিটির বর্ণনা সম্বলিত একটি স্ট্রিং।
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
যখন tts.stop-এ কোনো কল করা হয় এবং এই এক্সটেনশনটি কথা বলার মাঝপথে থাকে, তখন এটি সক্রিয় হয়। যদি কোনো এক্সটেনশন onStop-এ একটি কল পায় এবং স্পিচ ইতিমধ্যেই বন্ধ থাকে, তবে এটির কিছুই করা উচিত নয় (কোনো ত্রুটি দেখানো উচিত নয়)। যদি স্পিচ পজড অবস্থায় থাকে, তবে এটি সেই পজড অবস্থাটি বাতিল করে দেবে।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
যখন কোনো টিটিএস ক্লায়েন্ট জানায় যে একটি ভাষার আর প্রয়োজন নেই, তখন এটি সক্রিয় হয়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
- অনুরোধকারী
- ভাষা
স্ট্রিং
- আনইনস্টল অপশন