chrome.tts

תיאור

משתמשים ב-API של chrome.tts כדי להפעיל המרת טקסט לדיבור (TTS) מסונתז. אפשר גם לעיין בממשק ה-API הקשור ttsEngine, שמאפשר לתוסף להטמיע מנוע דיבור.

דפדפן Chrome מספק את היכולת הזו ב-Windows (באמצעות SAPI 5), ב-Mac OS X וב-ChromeOS, באמצעות יכולות סינתזת הדיבור שמסופקות על ידי מערכת ההפעלה. בכל הפלטפורמות, המשתמש יכול להתקין תוספים שנרשמים כמנועי דיבור חלופיים.

הרשאות

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);     }   } ); 

הקריאה החוזרת מוחזרת מיד, לפני שהמנוע מתחיל ליצור דיבור. מטרת הקריאה החוזרת היא להודיע לכם על שגיאות תחביר בשימוש שלכם ב-TTS API, ולא לאתר את כל השגיאות האפשריות שעלולות להתרחש בתהליך של סינתזה והפקת דיבור. כדי לזהות גם את השגיאות האלה, צריך להשתמש ב-event listener, כמו שמתואר בקטע הבא.

האזנה לאירועים

כדי לקבל מידע נוסף בזמן אמת על הסטטוס של הדיבור המסונתז, מעבירים פונקציית event listener באפשרויות אל 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': הושג סמן SSML. משתמשים ב-event.charIndex כדי לקבוע את המיקום הנוכחי של הדיבור.
  • 'end': המנוע סיים להקריא את האמירה.
  • 'interrupted': הדיבור הזה הופסק בגלל שיחה אחרת אל speak() או stop(), והוא לא הסתיים.
  • 'cancelled': הדיבור הזה הוכנס לתור, אבל אחר כך בוטל על ידי שיחה אחרת אל speak() או stop(), ולא התחיל לדבר בכלל.
  • 'error': אירעה שגיאה שספציפית למנוע, ואי אפשר להשמיע את האמירה הזו. פרטים נוספים מופיעים בכתובת event.errorMessage.

ארבעה מסוגי האירועים – 'end',‏ 'interrupted',‏ 'cancelled' ו-'error' – הם סופיים. אחרי שמתקבל אחד מהאירועים האלה, ההבעה הזו לא תושמע יותר ולא יתקבלו אירועים חדשים מההבעה הזו.

יכול להיות שחלק מהקולות לא יתמכו בכל סוגי האירועים, ויכול להיות שחלק מהקולות לא ישלחו אירועים בכלל. אם לא רוצים להשתמש בקול מסוים אלא אם הוא שולח אירועים מסוימים, צריך להעביר את האירועים הנדרשים בחבר requiredEventTypes של אובייקט האפשרויות, או להשתמש ב-getVoices() כדי לבחור קול שעונה על הדרישות. שתי האפשרויות מתוארות בהמשך.

תגי עיצוב של SSML

יכול להיות שההגדרות שמשמשות ב-API הזה יכללו תגי עיצוב באמצעות Speech Synthesis Markup Language ‏(SSML). אם משתמשים ב-SSML, הארגומנט הראשון של speak() צריך להיות מסמך SSML מלא עם כותרת XML ותג <speak> ברמה העליונה, ולא קטע מסמך.

לדוגמה:

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

לא כל מנועי הדיבור תומכים בכל תגי ה-SSML, ויש מנועים שלא תומכים ב-SSML בכלל, אבל כל המנועים חייבים להתעלם מכל SSML שהם לא תומכים בו, ולהמשיך להקריא את הטקסט הבסיסי.

בחירת קול

כברירת מחדל, 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

‎"start"

"end"

"word"

"sentence"

"marker"

"interrupted"

"cancelled"

"error"

"pause"

"resume"

TtsEvent

אירוע ממנוע ה-TTS שמעביר את הסטטוס של אמירה.

מאפיינים

  • charIndex

    מספר אופציונלי

    האינדקס של התו הנוכחי באמירה. באירועים של מילים, האירוע מופעל בסוף מילה אחת ולפני תחילת המילה הבאה. הסימן charIndex מייצג נקודה בטקסט בתחילת המילה הבאה שתבוטא.

  • errorMessage

    מחרוזת אופציונלי

    תיאור השגיאה, אם סוג האירוע הוא error.

  • length

    מספר אופציונלי

    Chrome 74 ואילך

    אורך החלק הבא של האמירה. לדוגמה, באירוע word, זהו אורך המילה שתאמר בהמשך. אם מנוע הדיבור לא מגדיר את הערך, הוא יהיה ‎-1.

  • סוג

    הסוג יכול להיות start ברגע שהדיבור מתחיל, word כשמגיעים לגבול של מילה, sentence כשמגיעים לגבול של משפט, marker כשמגיעים לרכיב של תג SSML, end כשמגיעים לסוף של ההצהרה, interrupted כשההצהרה נעצרת או מופרעת לפני שמגיעים לסוף, cancelled כשהיא מוסרת מהתור לפני שהיא מסונתזת, או error כשמתרחשת שגיאה אחרת. כשמשהים דיבור, מופעל אירוע pause אם משהים אמירה מסוימת באמצע, ואירוע resume אם הדיבור של אמירה מסוימת ממשיך. שימו לב: יכול להיות שאירועי השהיה והפעלה מחדש לא יופעלו אם הדיבור מושהה בין אמירות.

TtsOptions

Chrome 77 ואילך

אפשרויות הדיבור של מנוע ה-TTS.

מאפיינים

  • desiredEventTypes

    string[] אופציונלי

    סוגי אירועי ה-TTS שאתם רוצים להאזין להם. אם לא מציינים סוגים, יכול להיות שכל סוגי האירועים יישלחו.

  • הוספה לתור

    ‫boolean אופציונלי

    אם הערך הוא true, הדיבור הזה יתווסף לתור אם ה-TTS כבר פועל. אם הערך הוא false (ברירת המחדל), כל דיבור נוכחי מופסק ותור הדיבור מפונה לפני השמעת האמירה החדשה.

  • extensionId

    מחרוזת אופציונלי

    מזהה התוסף של מנוע הדיבור שבו רוצים להשתמש, אם ידוע.

  • gender

    VoiceGender אופציונלי

    הוצא משימוש מאז Chrome 77

    המאפיין 'מגדר' הוצא משימוש והמערכת תתעלם ממנו.

    המגדר של הקול לדיבור מסונתז.

  • lang

    מחרוזת אופציונלי

    השפה שבה ישתמשו לסינתזה, בפורמט שפה-אזור. דוגמאות: '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 מהמהירות הרגילה, גם אם תציינו ערך גדול מ-3.0.

  • requiredEventTypes

    string[] אופציונלי

    סוגי אירועי ה-TTS שהקול צריך לתמוך בהם.

  • voiceName

    מחרוזת אופציונלי

    השם של הקול שבו רוצים להשתמש לסינתזה. אם השדה ריק, נעשה שימוש בכל קול זמין.

  • עוצמת קול

    מספר אופציונלי

    עוצמת הקול של הדיבור בין 0 ל-1 כולל, כאשר 0 היא העוצמה הכי נמוכה ו-1 היא העוצמה הכי גבוהה. ברירת המחדל היא 1.0.

  • onEvent

    ‫void אופציונלי

    הפונקציה הזו מופעלת עם אירועים שמתרחשים בתהליך של אמירת ההצהרה.

    הפונקציה onEvent נראית כך:

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

    • אירוע

      אירוע העדכון ממנוע המרת הטקסט לדיבור שמציין את הסטטוס של ההצהרה הזו.

TtsVoice

תיאור של קול שזמין לסינתזת דיבור.

מאפיינים

  • eventTypes

    EventType[] אופציונלי

    כל סוגי האירועים של הקריאה החוזרת שהקול הזה יכול לשלוח.

  • extensionId

    מחרוזת אופציונלי

    המזהה של התוסף שמספק את הקול הזה.

  • gender

    VoiceGender אופציונלי

    הוצא משימוש מאז Chrome 70

    המאפיין 'מגדר' הוצא משימוש והמערכת תתעלם ממנו.

    המגדר של הקול.

  • lang

    מחרוזת אופציונלי

    השפה שבה הקול הזה תומך, בפורמט language-region. דוגמאות: 'en',‏ 'en-US',‏ 'en-GB',‏ 'zh-CN'.

  • שלט רחוק

    ‫boolean אופציונלי

    אם הערך הוא true, מנוע הסינתזה הוא משאב רשת מרוחק. יכול להיות שזמן האחזור יהיה ארוך יותר, וייתכן שיהיו עלויות רוחב פס.

  • voiceName

    מחרוזת אופציונלי

    שם הקול.

VoiceGender

Chrome 54 ואילך הוצא משימוש מאז Chrome 70

המאפיין 'מגדר' הוצא משימוש והמערכת מתעלמת ממנו.

Enum

"male"

‎"female"‎

Methods

getVoices()

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

מקבל מערך של כל הקולות הזמינים.

החזרות

  • Promise<TtsVoice[]>

    Chrome 101 ואילך

isSpeaking()

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

בודקת אם המנוע מדבר כרגע. ב-Mac OS X, התוצאה היא true בכל פעם שמנוע הדיבור של המערכת מדבר, גם אם הדיבור לא הופעל על ידי Chrome.

החזרות

  • Promise<boolean>

    Chrome 101 ואילך

pause()

chrome.tts.pause(): void

השהיית סינתזת הדיבור, יכול להיות באמצע אמירה. התקשרות כדי להמשיך או להפסיק תבטל את ההשהיה של הדיבור.

resume()

chrome.tts.resume(): void

אם הדיבור הושהה, הוא ימשיך מהמקום שבו הוא הופסק.

speak()

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

הקראת טקסט באמצעות מנוע המרת טקסט לדיבור.

פרמטרים

  • אמירה

    מחרוזת

    הטקסט שיש להקריא, טקסט פשוט או מסמך SSML מלא ותקין. מנועי דיבור שלא תומכים ב-SSML יסירו את התגים ויקריאו את הטקסט. האורך המקסימלי של הטקסט הוא 32,768 תווים.

  • options

    TtsOptions אופציונלי

    אפשרויות הדיבור.

החזרות

  • Promise<void>

    Chrome 101 ואילך

stop()

chrome.tts.stop(): void

מפסיק את הדיבור הפעיל ומנקה את התור של כל ההצהרות שממתינות להשמעה. בנוסף, אם הדיבור הושהה, ההשהיה תבוטל עכשיו לקראת השיחה הבאה להקראה.

אירועים

onVoicesChanged

Chrome 124 ואילך
chrome.tts.onVoicesChanged.addListener(
  callback: function,
)

הפונקציה מופעלת כשמשתנה רשימת tts.TtsVoice שמוחזרת על ידי getVoices.

פרמטרים

  • callback

    פונקציה

    הפרמטר callback נראה כך:

    () => void