বর্ণনা
একটি এক্সটেনশন ব্যবহার করে একটি টেক্সট-টু-স্পীচ (TTS) ইঞ্জিন বাস্তবায়ন করতে chrome.ttsEngine
API ব্যবহার করুন৷ যদি আপনার এক্সটেনশনটি এই API ব্যবহার করে নিবন্ধন করে, এটি একটি উচ্চারণ এবং অন্যান্য পরামিতি সম্বলিত ইভেন্টগুলি পাবে যখন কোনো এক্সটেনশন বা Chrome অ্যাপ স্পিচ তৈরি করতে tts
API ব্যবহার করে। আপনার এক্সটেনশনটি তখন বক্তৃতা সংশ্লেষিত এবং আউটপুট করার জন্য যেকোন উপলব্ধ ওয়েব প্রযুক্তি ব্যবহার করতে পারে এবং স্থিতি প্রতিবেদন করতে ইভেন্টগুলিকে কলিং ফাংশনে ফেরত পাঠাতে পারে।
অনুমতি
ttsEngine
ধারণা এবং ব্যবহার
একটি এক্সটেনশন একটি বক্তৃতা ইঞ্জিন হিসাবে নিজেকে নিবন্ধন করতে পারেন. এটি করার মাধ্যমে, এটি tts.speak()
এবং tts.stop()
এর মতো ফাংশনে কিছু বা সমস্ত কল বাধা দিতে পারে এবং একটি বিকল্প বাস্তবায়ন প্রদান করতে পারে। এক্সটেনশনগুলি সার্ভার থেকে স্ট্রিমিং অডিও, HTML5 অডিও সহ বক্তৃতা প্রদানের জন্য যেকোন উপলব্ধ ওয়েব প্রযুক্তি ব্যবহার করার জন্য বিনামূল্যে। একটি এক্সটেনশন এমনকি উচ্চারণের সাথে ভিন্ন কিছু করতে পারে, যেমন একটি পপআপে ক্লোজড ক্যাপশন প্রদর্শন করা বা দূরবর্তী সার্ভারে লগ বার্তা হিসাবে প্রেরণ করা।
একটি TTS ইঞ্জিন বাস্তবায়ন করতে, একটি এক্সটেনশনকে অবশ্যই "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'
ইভেন্টগুলি স্পিচ ইঞ্জিন দ্বারা পাঠানো হয় না; এগুলি Chrome দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হয়৷
টেক্সট-টু-স্পিচ ক্লায়েন্টরা 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 হওয়া উচিত এবং mono হিসাবে এনকোড করা, audioStreamOptions.sampleRate, এবং লিনিয়ার pcm হিসাবে, 32-বিট স্বাক্ষরিত ফ্লোট অর্থাৎ জাভাস্ক্রিপ্টে Float32Array টাইপ।
- charIndex
সংখ্যা ঐচ্ছিক
এই অডিও বাফারের সাথে যুক্ত অক্ষর সূচক।
- লাস্টবাফার
বুলিয়ান ঐচ্ছিক
সত্য যদি এই অডিও বাফারটি উচ্চারিত পাঠ্যের জন্য শেষ হয়।
AudioStreamOptions
একটি ইঞ্জিন দ্বারা উত্পাদিত হবে বলে প্রত্যাশিত অডিও স্ট্রিম বিন্যাস রয়েছে৷
বৈশিষ্ট্য
- বাফার সাইজ
সংখ্যা
একটি অডিও বাফারের মধ্যে নমুনার সংখ্যা।
- নমুনা হার
সংখ্যা
একটি অডিও বাফারে প্রত্যাশিত নমুনা হার৷
SpeakOptions
tts.speak() পদ্ধতিতে নির্দিষ্ট বিকল্পগুলি।
বৈশিষ্ট্য
- লিঙ্গ
ভয়েসজেন্ডার ঐচ্ছিক
ক্রোম 92 থেকে অবরুদ্ধলিঙ্গ অবজ্ঞা করা হয়েছে এবং উপেক্ষা করা হবে।
সংশ্লেষিত বক্তৃতা জন্য ভয়েস লিঙ্গ.
- lang
স্ট্রিং ঐচ্ছিক
সংশ্লেষণের জন্য যে ভাষাটি ব্যবহার করা হবে, ভাষা আকারে - অঞ্চল । উদাহরণ: 'en', 'en-US', 'en-GB', 'zh-CN'।
- পিচ
সংখ্যা ঐচ্ছিক
0 এবং 2 এর মধ্যে স্পিকিং পিচ অন্তর্ভুক্ত, 0 সর্বনিম্ন এবং 2 সর্বোচ্চ। 1.0 এই ভয়েসের ডিফল্ট পিচের সাথে মিলে যায়।
- হার
সংখ্যা ঐচ্ছিক
এই ভয়েসের জন্য ডিফল্ট হারের তুলনায় কথা বলার হার। 1.0 হল ডিফল্ট হার, সাধারণত প্রতি মিনিটে প্রায় 180 থেকে 220 শব্দ। 2.0 এর দ্বিগুণ দ্রুত এবং 0.5 এর অর্ধেক দ্রুত। এই মানটি 0.1 এবং 10.0 এর মধ্যে থাকার নিশ্চয়তা, অন্তর্ভুক্ত। যখন একটি ভয়েস এই সম্পূর্ণ পরিসরের হার সমর্থন করে না, তখন একটি ত্রুটি ফেরত দেবেন না। পরিবর্তে, ভয়েস সমর্থন করে এমন রেঞ্জে হার ক্লিপ করুন।
- ভয়েস নাম
স্ট্রিং ঐচ্ছিক
সংশ্লেষণের জন্য ব্যবহার করা ভয়েসের নাম।
- আয়তন
সংখ্যা ঐচ্ছিক
0 এবং 1 এর মধ্যে স্পিকিং ভলিউম অন্তর্ভুক্ত, 0 সর্বনিম্ন এবং 1 সর্বোচ্চ, 1.0 ডিফল্ট সহ।
VoiceGender
লিঙ্গ অবজ্ঞা করা হয়েছে এবং উপেক্ষা করা হবে।
এনাম
"পুরুষ" "মহিলা"
পদ্ধতি
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
কণ্ঠস্বরের তালিকা আপডেট করার জন্য একটি ইঞ্জিন দ্বারা কল করা হয়েছে। এই তালিকাটি এই এক্সটেনশনের ম্যানিফেস্টে ঘোষিত যেকোনো ভয়েসকে ওভাররাইড করে।
পরামিতি
- ভয়েস
TtsVoice [ ]
tts.TtsVoice
অবজেক্টের অ্যারে যা বক্তৃতা সংশ্লেষণের জন্য উপলব্ধ ভয়েসকে প্রতিনিধিত্ব করে।
ঘটনা
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
- উচ্চারণ
স্ট্রিং
- বিকল্প
- অডিওস্ট্রিম অপশন
- TtsAudio পাঠান
ফাংশন
sendTtsAudio
প্যারামিটারটি এর মতো দেখাচ্ছে:(audioBufferParams: AudioBuffer) => void
- audioBufferParams
একটি অডিও বাফার এবং সংশ্লিষ্ট ডেটা ধারণকারী পরামিতি।
- পাঠানোর ত্রুটি
ফাংশন
Chrome 94+sendError
প্যারামিটারটি এর মত দেখাচ্ছে:(errorMessage?: string) => void
- errorMessage
স্ট্রিং ঐচ্ছিক
একটি স্ট্রিং ত্রুটি বর্ণনা করে।
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
tts.stop এ কল করা হলে বরখাস্ত হয় এবং এই এক্সটেনশনটি কথা বলার মাঝখানে হতে পারে। যদি একটি এক্সটেনশন অনস্টপে একটি কল পায় এবং বক্তৃতা ইতিমধ্যেই বন্ধ হয়ে যায়, তবে এটি কিছুই করবে না (একটি ত্রুটি বাড়াবে না)৷ যদি বক্তৃতা থামানো অবস্থায় থাকে, তাহলে এটি থামানো অবস্থা বাতিল করবে।
পরামিতি
- কলব্যাক
ফাংশন
callback
প্যারামিটারটি এর মতো দেখাচ্ছে:() => void