ब्यौरा
लिखाई को बोली में बदलने की सुविधा(टीटीएस) इंजन को एक्सटेंशन की मदद से लागू करने के लिए, chrome.ttsEngine
एपीआई का इस्तेमाल करें. अगर आपका एक्सटेंशन इस एपीआई का इस्तेमाल करके रजिस्टर किया जाता है, तो उसे ऐसे इवेंट मिलेंगे जिनमें बोला गया वाक्य और अन्य पैरामीटर शामिल होंगे. ऐसा तब होगा, जब कोई एक्सटेंशन या 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'
: एक 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
ऑडियो बफ़र और उससे जुड़े डेटा वाले पैरामीटर.
प्रॉपर्टी
-
audioBuffer
अरेबफ़र
लिखाई को बोली में बदलने वाले इंजन का ऑडियो बफ़र. इसकी लंबाई सिर्फ़ audioStreamOptions.bufferSize होनी चाहिए और audioStreamOptions.sampleRate पर, मोनो के तौर पर कोड में होनी चाहिए. साथ ही, लीनियर pcm के तौर पर, 32-बिट साइन किए गए फ़्लोट यानी JavaScript में Flow32Array टाइप की होनी चाहिए.
-
charIndex
नंबर वैकल्पिक
इस ऑडियो बफ़र से जुड़ा वर्ण इंडेक्स.
-
isLastBuffer
बूलियन ज़रूरी नहीं
अगर यह ऑडियो बफ़र, बोले जा रहे टेक्स्ट के आखिरी हिस्से पर आता है, तो वैल्यू 'सही' होगी.
AudioStreamOptions
इसमें वह ऑडियो स्ट्रीम फ़ॉर्मैट शामिल होता है जो इंजन से बनने की उम्मीद करता है.
प्रॉपर्टी
-
bufferSize
संख्या
किसी ऑडियो बफ़र में मौजूद सैंपल की संख्या.
-
sampleRate
संख्या
ऑडियो बफ़र में सैंपल रेट होना चाहिए.
SpeakOptions
tts.speak() तरीके के हिसाब से उपलब्ध विकल्प.
प्रॉपर्टी
-
लिंग
VoiceGender ज़रूरी नहीं
Chrome 92 के बाद से अब तक काम नहीं करतालैंगिक जानकारी के इस्तेमाल पर रोक लगा दी गई है और इसे अनदेखा कर दिया जाएगा.
मशीनी बोली के लिए आवाज़ का लिंग.
-
lang
स्ट्रिंग ज़रूरी नहीं
सिंथेसिस के लिए इस्तेमाल की जाने वाली भाषा, language-region के रूप में. उदाहरण: '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 के बीच होगी. इसमें यह वैल्यू भी शामिल है. अगर किसी वॉइस में सेट की गई यह रेंज काम नहीं करती, तो गड़बड़ी का मैसेज न दिखाएं. इसके बजाय, आवाज़ के हिसाब से ऑडियो की फ़्रीक्वेंसी को क्लिप करें.
-
voiceName
स्ट्रिंग ज़रूरी नहीं
सिंथेसिस के लिए इस्तेमाल की जाने वाली आवाज़ का नाम.
-
आवाज़
नंबर वैकल्पिक
आवाज़ 0 से 1 के बीच होती है. इसमें सबसे कम वैल्यू और 1 का मतलब सबसे ज़्यादा होता है. डिफ़ॉल्ट वैल्यू 1.0 होती है.
VoiceGender
लैंगिक जानकारी के इस्तेमाल पर रोक लगा दी गई है और इसे अनदेखा कर दिया जाएगा.
Enum
"पुरुष"
"महिला"
तरीके
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
-
बातचीत
स्ट्रिंग
-
विकल्प
-
audioStreamOptions
-
sendTtsAudio
फ़ंक्शन
sendTtsAudio
पैरामीटर ऐसा दिखता है:(audioBufferParams: AudioBuffer) => void
-
audioBufferParams
ऑडियो बफ़र और उससे जुड़े डेटा वाले पैरामीटर.
-
-
sendError
फ़ंक्शन
Chrome 94 और उसके बाद वाले वर्शन के लिएsendError
पैरामीटर ऐसा दिखता है:(errorMessage?: string) => void
-
errorMessage
स्ट्रिंग ज़रूरी नहीं
गड़बड़ी के बारे में जानकारी देने वाली स्ट्रिंग.
-
-
onStop
chrome.ttsEngine.onStop.addListener(
callback: function,
)
यह तब ट्रिगर होता है, जब tts.stop पर कॉल किया जाता है और यह एक्सटेंशन, बोलने के दौरान हो सकता है. अगर किसी एक्सटेंशन को onStop पर कॉल किया जाता है और स्पीच पहले से ही बंद हो जाती है, तो उसे कुछ नहीं करना चाहिए (गड़बड़ी नहीं करनी चाहिए). अगर बोली रोकी गई है, तो इसका मतलब है कि रुकी हुई स्थिति.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर ऐसा दिखता है:() => void