תיאור
משתמשים ב-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
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
אפשרויות הדיבור של מנוע ה-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
המאפיין 'מגדר' הוצא משימוש והמערכת מתעלמת ממנו.
Enum
"male"
"female"
Methods
החזרות
-
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.tts.onVoicesChanged.addListener(
callback: function,
)
הפונקציה מופעלת כשמשתנה רשימת tts.TtsVoice
שמוחזרת על ידי getVoices.
פרמטרים
- callback
פונקציה
הפרמטר
callback
נראה כך:() => void