ब्यौरा
एक्सटेंशन का इस्तेमाल करके, लिखाई को बोली में बदलने(टीटीएस) वाले इंजन को लागू करने के लिए, chrome.ttsEngine API का इस्तेमाल करें. अगर आपका एक्सटेंशन इस एपीआई का इस्तेमाल करके रजिस्टर करता है, तो उसे ऐसे इवेंट मिलेंगे जिनमें बोलने के लिए कोई शब्द और अन्य पैरामीटर शामिल होंगे. ऐसा तब होगा, जब कोई एक्सटेंशन या Chrome ऐप्लिकेशन, tts एपीआई का इस्तेमाल करके स्पीच जनरेट करेगा. इसके बाद, आपका एक्सटेंशन उपलब्ध किसी भी वेब टेक्नोलॉजी का इस्तेमाल करके, स्पीच को सिंथेसाइज़ और आउटपुट कर सकता है. साथ ही, स्टेटस की जानकारी देने के लिए, इवेंट को कॉलिंग फ़ंक्शन पर वापस भेज सकता है.
अनुमतियां
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': एसएसएमएल मार्कर पर पहुंच गया है.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
ऑडियो बफ़र और उससे जुड़ा डेटा शामिल करने वाले पैरामीटर.
प्रॉपर्टी
-
audioBuffer
ArrayBuffer
लिखाई को बोली में बदलने वाले इंजन का ऑडियो बफ़र. इसकी लंबाई, audioStreamOptions.bufferSize के बराबर होनी चाहिए.इसे मोनो के तौर पर, audioStreamOptions.sampleRate पर, और लीनियर पीसीएम के तौर पर एन्कोड किया जाना चाहिए. साथ ही, इसे 32-बिट साइंड फ़्लोट यानी JavaScript में Float32Array टाइप के तौर पर एन्कोड किया जाना चाहिए.
-
charIndex
number ज़रूरी नहीं
इस ऑडियो बफ़र से जुड़ा वर्ण इंडेक्स.
-
isLastBuffer
boolean optional
अगर यह ऑडियो बफ़र, बोले जा रहे टेक्स्ट के लिए आखिरी बफ़र है, तो True वैल्यू दिखाता है.
AudioStreamOptions
इसमें ऑडियो स्ट्रीम का वह फ़ॉर्मैट होता है जो इंजन से जनरेट होने की उम्मीद होती है.
प्रॉपर्टी
-
bufferSize
संख्या
ऑडियो बफ़र में मौजूद सैंपल की संख्या.
-
sampleRate
संख्या
ऑडियो बफ़र में ज़रूरी सैंपल रेट.
LanguageInstallStatus
आवाज़ इंस्टॉल करने की स्थिति.
Enum
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
किसी भाषा के इंस्टॉल होने की स्थिति.
प्रॉपर्टी
-
गड़बड़ी
string ज़रूरी नहीं है
इंस्टॉल नहीं हो पाने की वजह के बारे में जानकारी. अगर भाषा इंस्टॉल नहीं हो पाती है, तो इस फ़ील्ड में जानकारी भरी जा सकती है.
-
installStatus
इंस्टॉल करने की स्थिति.
-
lang
स्ट्रिंग
भाषा कोड-क्षेत्र कोड के फ़ॉर्मैट में भाषा स्ट्रिंग. इसमें क्षेत्र को छोड़ा जा सकता है. उदाहरण के लिए, en, en-AU, zh-CH.
LanguageUninstallOptions
किसी भाषा को अनइंस्टॉल करने के विकल्प.
प्रॉपर्टी
-
uninstallImmediately
बूलियन
अगर टीटीएस क्लाइंट चाहता है कि भाषा को तुरंत अनइंस्टॉल कर दिया जाए, तो यह वैल्यू 'सही' पर सेट होती है. इस पैरामीटर और अनुरोध करने वाले व्यक्ति की जानकारी के आधार पर, इंजन यह तय कर सकता है कि भाषा को कब अनइंस्टॉल करना है. अगर यह वैल्यू 'गलत है' पर सेट है, तो यह तय करने के लिए कि ऐप्लिकेशन को कब अनइंस्टॉल करना है, अन्य शर्तों का इस्तेमाल किया जा सकता है. जैसे, हाल ही में ऐप्लिकेशन का इस्तेमाल.
SpeakOptions
tts.speak() तरीके के लिए तय किए गए विकल्प.
प्रॉपर्टी
-
लिंग
VoiceGender ज़रूरी नहीं है
Chrome 92 से बंद कर दिया गया हैलिंग एट्रिब्यूट के इस्तेमाल पर रोक लगा दी गई है और इसे अनदेखा कर दिया जाएगा.
सिंथसाइज़्ड स्पीच के लिए आवाज़ का लिंग.
-
lang
string ज़रूरी नहीं है
टेक्स्ट को ऑडियो में बदलने के लिए इस्तेमाल की जाने वाली भाषा. यह भाषा-क्षेत्र के फ़ॉर्मैट में होनी चाहिए. उदाहरण: 'en', 'en-US', 'en-GB', 'zh-CN'.
-
पिच
number ज़रूरी नहीं
बोलने की पिच 0 से 2 के बीच होनी चाहिए. इसमें 0 सबसे कम और 2 सबसे ज़्यादा है. 1.0, इस आवाज़ की डिफ़ॉल्ट पिच से मेल खाता है.
-
दर
number ज़रूरी नहीं
इस आवाज़ के लिए, डिफ़ॉल्ट रेट के हिसाब से बोलने की रफ़्तार. डिफ़ॉल्ट रेट 1.0 होता है. आम तौर पर, यह हर मिनट में 180 से 220 शब्द होता है. 2.0 का मतलब है कि वीडियो की रफ़्तार दोगुनी हो जाएगी और 0.5 का मतलब है कि वीडियो की रफ़्तार आधी हो जाएगी. इस वैल्यू के 0.1 और 10.0 के बीच होने की गारंटी है. इसमें ये दोनों वैल्यू भी शामिल हैं. अगर कोई आवाज़, इस पूरी रेंज की दरों के साथ काम नहीं करती है, तो गड़बड़ी का मैसेज न दिखाएं. इसके बजाय, आवाज़ के हिसाब से दर को तय सीमा में रखें.
-
voiceName
string ज़रूरी नहीं है
आवाज़ का नाम, जिसका इस्तेमाल सिंथेसिस के लिए करना है.
-
आवाज़
number ज़रूरी नहीं
बोलने की आवाज़ 0 से 1 के बीच होनी चाहिए. इसमें 0 का मतलब सबसे कम और 1 का मतलब सबसे ज़्यादा होता है. इसकी डिफ़ॉल्ट वैल्यू 1.0 होती है.
TtsClient
स्टेटस का अनुरोध करने वाले क्लाइंट के लिए आइडेंटिफ़ायर.
प्रॉपर्टी
-
आईडी
स्ट्रिंग
भाषा मैनेज करने का अनुरोध करने वाला क्लाइंट. एक्सटेंशन के लिए, यह यूनीक एक्सटेंशन आईडी होता है. Chrome की सुविधाओं के लिए, यह सुविधा का ऐसा नाम है जिसे आसानी से पढ़ा जा सकता है.
-
सोर्स
अनुरोध करने वाला कौन है.
TtsClientSource
अनुरोध करने वाला कौन है.
Enum
"chromefeature"
"extension"
VoiceGender
लिंग एट्रिब्यूट के इस्तेमाल पर रोक लगा दी गई है और इसे अनदेखा कर दिया जाएगा.
Enum
"male"
"female"
तरीके
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
-
अनुरोध करने वाला
-
lang
स्ट्रिंग
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
यह इवेंट तब ट्रिगर होता है, जब टीटीएस क्लाइंट किसी भाषा के इंस्टॉल होने की स्थिति का अनुरोध करता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callbackपैरामीटर ऐसा दिखता है:(requestor: TtsClient, lang: string) => void
-
अनुरोध करने वाला
-
lang
स्ट्रिंग
-
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, ऑडियो चलाने की सेवाएं उपलब्ध कराता है और टीटीएस इवेंट को मैनेज करता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callbackपैरामीटर ऐसा दिखता है:(utterance: string, options: SpeakOptions, audioStreamOptions: AudioStreamOptions, sendTtsAudio: function, sendError: function) => void
-
बोले गए शब्द
स्ट्रिंग
-
विकल्प
-
audioStreamOptions
-
sendTtsAudio
फ़ंक्शन
sendTtsAudioपैरामीटर ऐसा दिखता है:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
ऑडियो बफ़र और उससे जुड़ा डेटा शामिल करने वाले पैरामीटर.
-
-
sendError
फ़ंक्शन
Chrome 94 और इसके बाद के वर्शनsendErrorपैरामीटर ऐसा दिखता है:(errorMessage?: string) => void
-
errorMessage
string ज़रूरी नहीं है
गड़बड़ी के बारे में बताने वाली स्ट्रिंग.
-
-
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
-
अनुरोध करने वाला
-
lang
स्ट्रिंग
-
uninstallOptions
-