browser.tts

ब्यौरा

सिंथसाइज़ किए गए टेक्स्ट-टू-स्पीच (टीटीएस) को चलाने के लिए, chrome.tts एपीआई का इस्तेमाल करें. इससे जुड़ा ttsEngine एपीआई भी देखें. इसकी मदद से, एक्सटेंशन में स्पीच इंजन लागू किया जा सकता है.

Chrome, Windows (SAPI 5 का इस्तेमाल करके), Mac OS X, और ChromeOS पर यह सुविधा देता है. इसके लिए, वह ऑपरेटिंग सिस्टम की स्पीच सिंथेसिस सुविधाओं का इस्तेमाल करता है. सभी प्लैटफ़ॉर्म पर, उपयोगकर्ता ऐसे एक्सटेंशन इंस्टॉल कर सकता है जो खुद को वैकल्पिक स्पीच इंजन के तौर पर रजिस्टर करते हैं.

अनुमतियां

tts

कॉन्सेप्ट और इस्तेमाल

ऑडियो जनरेट करना

बोलने के लिए, अपने एक्सटेंशन से speak() पर कॉल करें. उदाहरण के लिए:

browser.tts.speak('Hello, world.');

बोलना तुरंत बंद करने के लिए, बस stop() को कॉल करें:

browser.tts.stop();

आपके पास ऐसे विकल्प देने की सुविधा होती है जो बोली की अलग-अलग प्रॉपर्टी को कंट्रोल करते हैं. जैसे, बोली की दर, पिच वगैरह. उदाहरण के लिए:

browser.tts.speak('Hello, world.', {'rate': 2.0});

भाषा की जानकारी देना भी एक अच्छा आइडिया है, ताकि उस भाषा (और लागू होने पर क्षेत्रीय बोली) के साथ काम करने वाले सिंथेसाइज़र को चुना जा सके.

browser.tts.speak('Hello, world.', {'lang': 'en-US', 'rate': 2.0});

डिफ़ॉल्ट रूप से, speak() को किया गया हर कॉल, चल रही किसी भी बातचीत में रुकावट डालता है और तुरंत जवाब देता है. यह जानने के लिए कि कॉल करने से कोई रुकावट तो नहीं होगी, isSpeaking() पर कॉल करें. इसके अलावा, enqueue विकल्प का इस्तेमाल करके, इस उच्चारण को उच्चारणों की सूची में जोड़ा जा सकता है. मौजूदा उच्चारण के खत्म होने के बाद, सूची में मौजूद उच्चारणों को बोला जाएगा.

browser.tts.speak('Speak this first.');
browser.tts.speak(
    'Speak this next, when the first sentence is done.', {'enqueue': true});

सभी विकल्पों की पूरी जानकारी tts.speak() में देखी जा सकती है. सभी स्पीच इंजन, सभी विकल्पों के साथ काम नहीं करेंगे.

गड़बड़ियों का पता लगाने और यह पक्का करने के लिए कि speak() को सही तरीके से कॉल किया जा रहा है, ऐसा कॉलबैक फ़ंक्शन पास करें जिसमें कोई आर्ग्युमेंट न हो. कॉलबैक में, runtime.lastError की जांच करके देखें कि क्या कोई गड़बड़ी हुई है.

browser.tts.speak(
  utterance,
  options,
  function() {
    if (browser.runtime.lastError) {
      console.log('Error: ' + browser.runtime.lastError.message);
    }
  }
);

इंजन के स्पीच जनरेट करने से पहले ही, कॉलबैक तुरंत वापस आ जाता है. कॉलबैक का मकसद, टीटीएस एपीआई के इस्तेमाल में सिंटैक्स से जुड़ी गड़बड़ियों के बारे में आपको सूचना देना है. इसका मकसद, बोली को सिंथेसाइज़ करने और आउटपुट देने की प्रोसेस में होने वाली सभी संभावित गड़बड़ियों को पकड़ना नहीं है. इन गड़बड़ियों को भी पकड़ने के लिए, आपको इवेंट लिसनर का इस्तेमाल करना होगा. इसके बारे में अगले सेक्शन में बताया गया है.

इवेंट सुनना

सिंथेसाइज़ की गई स्पीच की स्थिति के बारे में रीयल-टाइम में ज़्यादा जानकारी पाने के लिए, speak() के विकल्पों में इवेंट लिसनर को पास करें. जैसे:

browser.tts.speak(
  utterance,
  {
    onEvent: function(event) {
      console.log('Event ' + event.type + ' at position ' + event.charIndex);
      if (event.type == 'error') {
        console.log('Error: ' + event.errorMessage);
      }
    }
  },
  callback
);

हर इवेंट में, इवेंट का टाइप, बोले गए शब्दों के हिसाब से मौजूदा स्पीच का वर्ण इंडेक्स, और गड़बड़ी वाले इवेंट के लिए, गड़बड़ी का वैकल्पिक मैसेज शामिल होता है. इवेंट के टाइप:

  • 'start': इंजन ने टेक्स्ट को बोलना शुरू कर दिया है.
  • 'word': शब्द की सीमा पूरी हो गई है. बोले जा रहे शब्द की मौजूदा पोज़िशन का पता लगाने के लिए, event.charIndex का इस्तेमाल करें.
  • 'sentence': वाक्य की सीमा पूरी हो गई है. बोले जा रहे शब्द की मौजूदा पोज़िशन का पता लगाने के लिए, event.charIndex का इस्तेमाल करें.
  • 'marker': एसएसएमएल मार्कर तक पहुंचा गया. बोले जा रहे शब्द की मौजूदा पोज़िशन का पता लगाने के लिए, event.charIndex का इस्तेमाल करें.
  • 'end': इंजन ने टेक्स्ट को बोलकर सुनाने की प्रोसेस पूरी कर ली है.
  • 'interrupted': speak() या stop() को किए गए किसी अन्य कॉल की वजह से, इस कॉल में रुकावट आई और यह पूरा नहीं हो सका.
  • 'cancelled': इस वाक्य को सूची में रखा गया था, लेकिन speak() या stop() को किए गए किसी अन्य कॉल की वजह से इसे रद्द कर दिया गया. साथ ही, इसे कभी नहीं बोला गया.
  • 'error': इंजन से जुड़ी कोई गड़बड़ी हुई है. इसलिए, इस बात को नहीं बोला जा सकता. ज़्यादा जानकारी के लिए, event.errorMessage देखें.

चार तरह के इवेंट—'end', 'interrupted', 'cancelled', और 'error'—फ़ाइनल होते हैं. इनमें से कोई एक इवेंट मिलने के बाद, यह अटरेंस अब नहीं बोला जाएगा. साथ ही, इस अटरेंस से कोई नया इवेंट नहीं मिलेगा.

ऐसा हो सकता है कि कुछ आवाज़ें, सभी तरह के इवेंट के साथ काम न करें. इसके अलावा, कुछ आवाज़ें कोई भी इवेंट न भेजें. अगर आपको किसी आवाज़ का इस्तेमाल तब तक नहीं करना है, जब तक वह कुछ इवेंट न भेजे, तो विकल्प ऑब्जेक्ट के requiredEventTypes मेंबर में ज़रूरी इवेंट पास करें या अपनी ज़रूरतों के हिसाब से आवाज़ चुनने के लिए, getVoices() का इस्तेमाल करें. इन दोनों के बारे में यहां बताया गया है.

एसएसएमएल मार्कअप

इस एपीआई में इस्तेमाल किए गए शब्दों में, स्पीच सिंथेसिस मार्कअप भाषा (एसएसएमएल) का इस्तेमाल करके मार्कअप शामिल किया जा सकता है. अगर एसएसएमएल का इस्तेमाल किया जाता है, तो speak() के लिए पहला आर्ग्युमेंट, एक्सएमएल हेडर और टॉप-लेवल <speak> टैग वाला पूरा एसएसएमएल दस्तावेज़ होना चाहिए, न कि दस्तावेज़ का कोई हिस्सा.

उदाहरण के लिए:

browser.tts.speak(
  '<?xml version="1.0"?>' +
  '<speak>' +
  '  The <emphasis>second</emphasis> ' +
  '  word of this sentence was emphasized.' +
  '</speak>'
);

सभी स्पीच इंजन, सभी एसएसएमएल टैग के साथ काम नहीं करेंगे. कुछ इंजन, एसएसएमएल के साथ बिलकुल भी काम नहीं करेंगे. हालांकि, सभी इंजन को ऐसे एसएसएमएल को अनदेखा करना होगा जो उनके साथ काम नहीं करते. साथ ही, उन्हें टेक्स्ट को बोलना होगा.

कोई आवाज़ चुनें

डिफ़ॉल्ट रूप से, Chrome आपकी चुनी गई भाषा के हिसाब से, हर उच्चारण के लिए सबसे सही आवाज़ चुनता है. ज़्यादातर Windows, Mac OS X, और ChromeOS सिस्टम पर, ऑपरेटिंग सिस्टम से मिलने वाली स्पीच सिंथेसिस की सुविधा, कम से कम एक भाषा में किसी भी टेक्स्ट को बोल सकती है. हालांकि, कुछ उपयोगकर्ताओं के पास उनके ऑपरेटिंग सिस्टम और Chrome के अन्य एक्सटेंशन से लागू किए गए स्पीच इंजन से, अलग-अलग तरह की आवाज़ें उपलब्ध हो सकती हैं. ऐसे मामलों में, सही आवाज़ चुनने या उपयोगकर्ता को विकल्पों की सूची दिखाने के लिए, कस्टम कोड लागू किया जा सकता है.

सभी आवाज़ों की सूची पाने के लिए, getVoices() को कॉल करें और उसे एक ऐसा फ़ंक्शन पास करें जो TtsVoice ऑब्जेक्ट के कलेक्शन को अपने आर्ग्युमेंट के तौर पर लेता है:

browser.tts.getVoices(
  function(voices) {
    for (var i = 0; i < voices.length; i++) {
      console.log('Voice ' + i + ':');
      console.log('  name: ' + voices[i].voiceName);
      console.log('  lang: ' + voices[i].lang);
      console.log('  extension id: ' + voices[i].extensionId);
      console.log('  event types: ' + voices[i].eventTypes);
    }
  }
);

टाइप

EventType

Chrome 54+ browser.* Chrome 148 से

Enum

"start"

"end"

"word"

"sentence"

"marker"

"interrupted"

"cancelled"

"error"

"pause"

"resume"

TtsEvent

टीटीएस इंजन का एक इवेंट, जो बोले गए शब्दों की स्थिति के बारे में बताता है.

प्रॉपर्टी

  • charIndex

    number ज़रूरी नहीं

    बोले गए वाक्य में मौजूदा वर्ण का इंडेक्स. शब्दों से जुड़े इवेंट के लिए, इवेंट एक शब्द के खत्म होने पर और अगले शब्द के शुरू होने से पहले ट्रिगर होता है. charIndex, टेक्स्ट में उस पॉइंट को दिखाता है जहां से अगला शब्द बोला जाना है.

  • errorMessage

    string ज़रूरी नहीं

    अगर इवेंट टाइप error है, तो गड़बड़ी का ब्यौरा.

  • लंबाई

    number ज़रूरी नहीं

    Chrome 74+ browser.* Chrome 148 के बाद से

    बोले गए वाक्य के अगले हिस्से की लंबाई. उदाहरण के लिए, word इवेंट में, यह उस शब्द की लंबाई होती है जो आगे बोला जाएगा. अगर स्पीच इंजन ने इसे सेट नहीं किया है, तो इसे -1 पर सेट किया जाएगा.

  • टाइप

    यह टाइप इनमें से कोई भी हो सकता है: start स्पीच शुरू होते ही, word जब शब्द की सीमा पूरी हो जाए, sentence जब वाक्य की सीमा पूरी हो जाए, marker जब एसएसएमएल मार्क एलिमेंट की सीमा पूरी हो जाए, end जब वाक्य खत्म हो जाए, interrupted जब वाक्य खत्म होने से पहले ही रुक जाए या उसमें रुकावट आ जाए, cancelled जब वाक्य को सिंथेसाइज़ किए जाने से पहले ही सूची से हटा दिया जाए या error जब कोई अन्य गड़बड़ी हो. स्पीच को रोकते समय, अगर किसी खास उच्चारण को बीच में रोका जाता है, तो pause इवेंट ट्रिगर होता है. वहीं, अगर उच्चारण को फिर से शुरू किया जाता है, तो resume इवेंट ट्रिगर होता है. ध्यान दें कि अगर बोलने के दौरान बीच में आवाज़ रोकी जाती है, तो हो सकता है कि रोकने और फिर से शुरू करने के इवेंट ट्रिगर न हों.

TtsOptions

Chrome 77+ Chrome 148 से browser.*

टीटीएस इंजन के लिए बोली के विकल्प.

प्रॉपर्टी

  • desiredEventTypes

    string[] ज़रूरी नहीं

    टीटीएस इवेंट के वे टाइप जिन्हें आपको सुनना है. अगर यह एट्रिब्यूट मौजूद नहीं है, तो हो सकता है कि सभी तरह के इवेंट भेजे जाएं.

  • कतार में जोड़ें

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

    अगर यह वैल्यू true है, तो टीटीएस की प्रोसेस पहले से चल रही होने पर, इस निर्देश को सूची में जोड़ दिया जाता है. अगर यह वैल्यू false (डिफ़ॉल्ट) है, तो यह नई बात बोलने से पहले, मौजूदा बातचीत को रोक देती है और स्पीच क्यू को खाली कर देती है.

  • extensionId

    string ज़रूरी नहीं

    अगर आपको पता है, तो इस्तेमाल किए जाने वाले स्पीच इंजन का एक्सटेंशन आईडी.

  • लिंग

    VoiceGender ज़रूरी नहीं है

    Chrome 77 के बाद से इस्तेमाल नहीं किया जा रहा है

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

    मशीनी आवाज़ के लिए, आवाज़ देने वाले का लिंग.

  • 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 से ज़्यादा वैल्यू इस्तेमाल करने की अनुमति नहीं है. हालांकि, कई आवाज़ों के लिए, कम से कम और ज़्यादा से ज़्यादा दरें और भी सीमित होंगी. उदाहरण के लिए, हो सकता है कि कोई आवाज़ सामान्य से तीन गुना ज़्यादा तेज़ न हो, भले ही आपने 3.0 से ज़्यादा वैल्यू तय की हो.

  • requiredEventTypes

    string[] ज़रूरी नहीं

    टीटीएस इवेंट के टाइप, जिन्हें आवाज़ के साथ इस्तेमाल किया जा सकता है.

  • voiceName

    string ज़रूरी नहीं

    सिंथेसिस के लिए इस्तेमाल की जाने वाली आवाज़ का नाम. अगर यह फ़ील्ड खाली है, तो उपलब्ध किसी भी आवाज़ का इस्तेमाल किया जाता है.

  • आवाज़

    number ज़रूरी नहीं

    बोलने की आवाज़ 0 से 1 के बीच होनी चाहिए. इसमें 0 सबसे कम और 1 सबसे ज़्यादा है. डिफ़ॉल्ट रूप से, यह 1.0 होती है.

  • onEvent

    void ज़रूरी नहीं

    इस फ़ंक्शन को उन इवेंट के साथ कॉल किया जाता है जो बोले गए शब्दों को प्रोसेस करने के दौरान होते हैं.

    onEvent फ़ंक्शन इस तरह दिखता है:

    (event: TtsEvent) => {...}

    • इवेंट

      लिखे गए शब्दों को सुनने की सुविधा वाले इंजन से मिला अपडेट इवेंट, जो इस उच्चारण की स्थिति बताता है.

TtsVoice

लिखे हुए शब्दों को आवाज़ में बदलने के लिए उपलब्ध आवाज़ की जानकारी.

प्रॉपर्टी

  • eventTypes

    EventType[] ज़रूरी नहीं

    सभी तरह के कॉलबैक इवेंट, जिन्हें यह आवाज़ भेज सकती है.

  • extensionId

    string ज़रूरी नहीं

    इस आवाज़ को उपलब्ध कराने वाले एक्सटेंशन का आईडी.

  • लिंग

    VoiceGender ज़रूरी नहीं है

    Chrome 70 के बाद से इस्तेमाल नहीं किया जा रहा है

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

    इस आवाज़ का लिंग.

  • lang

    string ज़रूरी नहीं

    वह भाषा जिसमें यह आवाज़ काम करती है. इसे भाषा-क्षेत्र के फ़ॉर्मैट में लिखा जाता है. उदाहरण: 'en', 'en-US', 'en-GB', 'zh-CN'.

  • रिमोट

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

    अगर यह वैल्यू true है, तो सिंथेसिस इंजन एक रिमोट नेटवर्क रिसॉर्स है. इसमें इंतज़ार का समय ज़्यादा हो सकता है और बैंडविड्थ की लागत भी लग सकती है.

  • voiceName

    string ज़रूरी नहीं

    आवाज़ का नाम.

VoiceGender

Chrome 54+ browser.* Chrome 148 से Chrome 70 से बंद कर दिया गया है

लिंग की जानकारी देने वाले एट्रिब्यूट का इस्तेमाल बंद कर दिया गया है और इसे अनदेखा किया जाता है.

Enum

"male"

"female"

तरीके

getVoices()

browser.tts.getVoices(): Promise<TtsVoice[]>

इससे, उपलब्ध सभी आवाज़ों का कलेक्शन मिलता है.

रिटर्न

  • Promise<TtsVoice[]>

    Chrome 101+ browser.* Chrome 148 से

isSpeaking()

browser.tts.isSpeaking(): Promise<boolean>

यह जांच करता है कि इंजन फ़िलहाल बोल रहा है या नहीं. Mac OS X पर, जब भी सिस्टम का स्पीच इंजन बोल रहा होता है, तब नतीजा सही होता है. भले ही, Chrome ने स्पीच शुरू न की हो.

रिटर्न

  • Promise<boolean>

    Chrome 101+ browser.* Chrome 148 से

pause()

browser.tts.pause(): void

यह स्पीच सिंथेसिस को रोकता है. ऐसा हो सकता है कि यह किसी वाक्य के बीच में ही रुक जाए. बातचीत को फिर से शुरू करने या रोकने के लिए, 'फिर से शुरू करें' या 'रोकें' कहें.

resume()

browser.tts.resume(): void

अगर स्पीच को रोका गया था, तो उसे वहीं से फिर से शुरू किया जाता है जहां उसे रोका गया था.

speak()

browser.tts.speak(
  utterance: string,
  options?: TtsOptions,
)
: Promise<void>

लिखाई को बोली में बदलने वाले इंजन का इस्तेमाल करके, टेक्स्ट को बोलकर सुनाता है.

पैरामीटर

  • utterance

    स्ट्रिंग

    बोलने के लिए टेक्स्ट, सादा टेक्स्ट या पूरा, सही तरीके से बनाया गया एसएसएमएल दस्तावेज़. एसएसएमएल के साथ काम न करने वाले स्पीच इंजन, टैग हटा देंगे और टेक्स्ट को बोलेंगे. टेक्स्ट में ज़्यादा से ज़्यादा 32,768 वर्ण हो सकते हैं.

  • विकल्प

    TtsOptions ज़रूरी नहीं

    बोलने के विकल्प.

रिटर्न

  • वादा<शून्य>

    Chrome 101+ browser.* Chrome 148 से

    यह तुरंत, बात खत्म होने से पहले ही जवाब देता है. अगर कोई गड़बड़ी होती है, तो प्रॉमिस को अस्वीकार कर दिया जाएगा. ज़्यादा जानकारी पाने के लिए, options.onEvent का इस्तेमाल करें.

stop()

browser.tts.stop(): void

इससे मौजूदा स्पीच बंद हो जाती है और सूची में मौजूद बाकी स्पीच भी मिट जाती हैं. इसके अलावा, अगर स्पीच को रोका गया था, तो अब उसे अगली बार बोलने के लिए फिर से चालू कर दिया जाएगा.

इवेंट

onVoicesChanged

Chrome 124+ ब्राउज़र.* Chrome 148 से
browser.tts.onVoicesChanged.addListener(
  callback: function,
)

getVoices से मिलने वाली tts.TtsVoice की सूची में बदलाव होने पर कॉल किया जाता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर कुछ ऐसा दिखता है:

    () => void