ब्यौरा
किसी एक्सटेंशन का इस्तेमाल करके, लिखाई को बोली में बदलने(TTS) इंजन की सुविधा लागू करने के लिए, 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 पर और लीनियर pcm के तौर पर एन्कोड की गई हो. JavaScript में 32-बिट मंज़ूर किया गया फ़्लोट यानी Float32Array टाइप होना चाहिए.
-
charIndex
नंबर ज़रूरी नहीं
इस ऑडियो बफ़र के साथ जुड़ा वर्ण इंडेक्स.
-
isLastBuffer
बूलियन ज़रूरी नहीं
अगर यह ऑडियो बफ़र, बोले जा रहे टेक्स्ट के लिए आखिरी बार ऑडियो बफ़र है, तो 'सही' करें.
AudioStreamOptions
इसमें वह ऑडियो स्ट्रीम फ़ॉर्मैट शामिल होता है जिसे इंजन से बनाया जाना चाहिए.
प्रॉपर्टी
-
bufferSize
नंबर
ऑडियो बफ़र में सैंपल की संख्या.
-
sampleRate
नंबर
ऑडियो बफ़र में सैंपल रेट का होना ज़रूरी है.
SpeakOptions
tts.speak() तरीके के लिए चुने गए विकल्प.
प्रॉपर्टी
-
gender
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 के बीच होता है. इसमें 0 का मतलब सबसे कम और 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 पर कॉल करने पर सक्रिय होता है. ऐसा हो सकता है कि यह एक्सटेंशन बोलने के बीच में हो. अगर किसी एक्सटेंशन पर कॉल आता है और बोलने की सुविधा पहले से ही बंद है, तो इससे कोई कार्रवाई नहीं की जाएगी. इससे कोई गड़बड़ी नहीं होगी. अगर बातचीत रोकी गई स्थिति में है, तो इससे रुकी हुई स्थिति रद्द हो जाएगी.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर ऐसा दिखता है:() => void