chrome.ttsEngine

ब्यौरा

किसी एक्सटेंशन का इस्तेमाल करके, लिखाई को बोली में बदलने(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

Chrome 92 और इसके बाद के वर्शन

पैरामीटर जिनमें ऑडियो बफ़र और उनसे जुड़ा डेटा मौजूद है.

प्रॉपर्टी

  • audioBuffer

    ArrayBuffer

    लिखाई को बोली में बदलने वाले इंजन से मिलने वाला ऑडियो बफ़र. इसकी लंबाई एक जैसी होनी चाहिए.साथ ही, इसकी लंबाई audioStreamOptions.bufferSize पर होती है और AudioStreamOptions.sampleRate पर और लीनियर pcm के तौर पर एन्कोड की गई हो. JavaScript में 32-बिट मंज़ूर किया गया फ़्लोट यानी Float32Array टाइप होना चाहिए.

  • charIndex

    नंबर ज़रूरी नहीं

    इस ऑडियो बफ़र के साथ जुड़ा वर्ण इंडेक्स.

  • isLastBuffer

    बूलियन ज़रूरी नहीं

    अगर यह ऑडियो बफ़र, बोले जा रहे टेक्स्ट के लिए आखिरी बार ऑडियो बफ़र है, तो 'सही' करें.

AudioStreamOptions

Chrome 92 और इसके बाद के वर्शन

इसमें वह ऑडियो स्ट्रीम फ़ॉर्मैट शामिल होता है जिसे इंजन से बनाया जाना चाहिए.

प्रॉपर्टी

  • bufferSize

    नंबर

    ऑडियो बफ़र में सैंपल की संख्या.

  • sampleRate

    नंबर

    ऑडियो बफ़र में सैंपल रेट का होना ज़रूरी है.

SpeakOptions

Chrome 92 और इसके बाद के वर्शन

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

Chrome 54+ Chrome 70 के बाद से अब सेवा में नहीं है

जेंडर के इस्तेमाल पर रोक लगा दी गई है और इसे अनदेखा कर दिया जाएगा.

Enum

तरीके

updateVoices()

Chrome 66 और इसके बाद के वर्शन
chrome.ttsEngine.updateVoices(
  voices: 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 92 और इसके बाद के वर्शन
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