chrome.tts

ब्यौरा

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

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

अनुमतियां

tts

सिद्धांत और इस्तेमाल

बोली जनरेट करें

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

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

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

chrome.tts.stop();

ऐसे विकल्प दिए जा सकते हैं जो बोली की अलग-अलग विशेषताओं, जैसे कि उसकी दर, पिच वगैरह को कंट्रोल कर सकते हैं. उदाहरण के लिए:

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

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

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

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

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

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

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

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

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

इवेंट के बारे में जानें

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

chrome.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> टैग वाला पूरा SSML दस्तावेज़ होना चाहिए. यह दस्तावेज़ का फ़्रैगमेंट नहीं होना चाहिए.

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

chrome.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 ऑब्जेक्ट का कलेक्शन मिले:

chrome.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 और इसके बाद के वर्शन

Enum

"end"

TtsEvent

किसी बातचीत की स्थिति के बारे में बताने के लिए, टीटीएस इंजन से मिला इवेंट.

प्रॉपर्टी

  • charIndex

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

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

  • errorMessage

    स्ट्रिंग ज़रूरी नहीं

    गड़बड़ी की जानकारी, अगर इवेंट टाइप error है.

  • length

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

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

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

  • टाइप

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

TtsOptions

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

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

प्रॉपर्टी

  • desiredEventTypes

    स्ट्रिंग[] ज़रूरी नहीं है

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

  • एन्क्यू

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

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

  • extensionId

    स्ट्रिंग ज़रूरी नहीं

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

  • gender

    VoiceGender ज़रूरी नहीं

    Chrome 77 के बाद से अब सेवा में नहीं है

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

    संश्लेषित बोली के लिए आवाज़ का लिंग.

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

  • requiredEventTypes

    स्ट्रिंग[] ज़रूरी नहीं है

    टीटीएस इवेंट के टाइप, इन इवेंट टाइप के साथ काम करते हैं.

  • voiceName

    स्ट्रिंग ज़रूरी नहीं

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

  • आवाज़

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

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

  • onEvent

    अमान्य ज़रूरी नहीं

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

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

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

    • इवेंट

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

TtsVoice

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

प्रॉपर्टी

  • eventTypes

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

    इस आवाज़ से भेजे जा सकने वाले सभी कॉलबैक इवेंट टाइप.

  • extensionId

    स्ट्रिंग ज़रूरी नहीं

    यह आवाज़ देने वाले एक्सटेंशन का आईडी.

  • gender

    VoiceGender ज़रूरी नहीं

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

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

    इस आवाज़ की लैंगिक जानकारी.

  • lang

    स्ट्रिंग ज़रूरी नहीं

    इस आवाज़ में इस्तेमाल की जा सकने वाली भाषा, भाषा-क्षेत्र में होनी चाहिए. उदाहरण: 'en', 'en-US', 'en-GB', 'zh-CN'.

  • रिमोट जॉब

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

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

  • voiceName

    स्ट्रिंग ज़रूरी नहीं

    आवाज़ का नाम.

VoiceGender

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

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

Enum

तरीके

getVoices()

वादा
chrome.tts.getVoices(
  callback?: function,
)

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

पैरामीटर

  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

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

    (voices: TtsVoice[])=>void

    • आवाज़ें

      स्पीच सिंथेसिस के लिए उपलब्ध आवाज़ों को दिखाने वाले tts.TtsVoice ऑब्जेक्ट का कलेक्शन.

लौटाए गए प्रॉडक्ट

  • Promise<TtsVoice[]>

    Chrome 101 और उसके बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

isSpeaking()

वादा
chrome.tts.isSpeaking(
  callback?: function,
)

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

पैरामीटर

  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

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

    (speaking: boolean)=>void

    • बोलना

      boolean

      अगर बोलें, तो सही है, नहीं तो गलत है.

लौटाए गए प्रॉडक्ट

  • Promise<boolean>

    Chrome 101 और उसके बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

pause()

chrome.tts.pause()

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

resume()

chrome.tts.resume()

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

speak()

वादा
chrome.tts.speak(
  utterance: string,
  options?: TtsOptions,
  callback?: function,
)

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

पैरामीटर

  • उच्चारण

    स्ट्रिंग

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

  • विकल्प

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

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

  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

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

    ()=>void

लौटाए गए प्रॉडक्ट

  • Promise<void>

    Chrome 101 और उसके बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

stop()

chrome.tts.stop()

मौजूदा स्पीच को रोकता है और रुके हुए उच्चारणों की सूची को फ़्लश करता है. साथ ही, अगर बातचीत रोकी गई थी, तो अब उसे अगली कॉल के लिए फिर से चालू कर दिया जाएगा.

इवेंट

onVoicesChanged

Chrome 124 और इसके बाद के वर्शन
chrome.tts.onVoicesChanged.addListener(
  callback: function,
)

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

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

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

    ()=>void