תיאור
שימוש ב-API של chrome.ttsEngine
כדי להטמיע מנוע המרה של טקסט לדיבור(TTS) באמצעות תוסף. אם התוסף שלכם ירשם באמצעות ה-API הזה, הוא יקבל אירועים שמכילים משפט שצריך לדבר ופרמטרים אחרים כשתוסף או אפליקציית Chrome כלשהם ישתמשו ב-API tts
כדי ליצור דיבור. לאחר מכן, התוסף יכול להשתמש בכל טכנולוגיית אינטרנט זמינה כדי לסנתז את הדיבור ולשלוח אותו כפלט, ולשלוח אירועים בחזרה לפונקציה הקוראת כדי לדווח על הסטטוס.
הרשאות
ttsEngine
מושגים ושימוש
תוסף יכול לרשום את עצמו כמנוע דיבור. כך הוא יכול ליירט חלק מהקריאות או את כולן לפונקציות כמו tts.speak()
ו-tts.stop()
ולספק הטמעה חלופית.
תוספים יכולים להשתמש בכל טכנולוגיית אינטרנט זמינה כדי לספק דיבור, כולל אודיו בסטרימינג משרת, אודיו ב-HTML5. תוסף יכול גם לבצע פעולה שונה עם ההצהרות, למשל להציג כתוביות בחלון קופץ או לשלוח אותן כהודעות ביומן לשרת מרוחק.
כדי להטמיע מנוע TTS, התוסף צריך להצהיר על ההרשאה 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
הם באותיות רישיות (case-sensitive) בסגנון camel case: למשל, voiceName
, בניגוד לקובץ המניפסט שבו נעשה שימוש ב-voice_name
).
סוגי האירועים האפשריים שאפשר לשלוח תואמים לסוגים של האירועים שהשיטה speak()
מקבלת:
'start'
: המנוע התחיל לדבר את ההבעה.'word'
: הגעתם לקצה המילה. משתמשים ב-event.charIndex
כדי לקבוע את מיקום הדיבור הנוכחי.'sentence'
: הגעתם לקצה המשפט. משתמשים ב-event.charIndex
כדי לקבוע את מיקום הדיבור הנוכחי.'marker'
: הגעתם לסמן SSML. משתמשים ב-event.charIndex
כדי לקבוע את מיקום הדיבור הנוכחי.'end'
: המנוע סיים לומר את ההבעה.'error'
: אירעה שגיאה ספציפית למנוע ולא ניתן לבטא את המשפט הזה. מעבירים מידע נוסף ב-event.errorMessage
.
אירועי 'interrupted'
ו-'cancelled'
לא נשלחים על ידי מנוע הדיבור, אלא נוצרים באופן אוטומטי על ידי Chrome.
לקוחות של Text-to-speech יכולים לקבל את פרטי הקול מהמניפסט של התוסף באמצעות קריאה ל-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
פרמטרים שמכילים מאגר אודיו ונתונים משויכים.
מאפיינים
-
audioBuffer
ArrayBuffer
מאגר האודיו ממנוע המרת הטקסט לדיבור. האורך שלו צריך להיות בדיוק audioStreamOptions.bufferSize, והוא צריך להיות מקודד כמונו, ב-audioStreamOptions.sampleRate וכ-PCM ליניארי, 32-bit signed float, כלומר הסוג Float32Array ב-JavaScript.
-
charIndex
מספר אופציונלי
אינדקס התווים שמשויך למאגר האודיו הזה.
-
isLastBuffer
בוליאני אופציונלי
הערך True מוחזר אם מאגר האודיו הזה הוא האחרון של הטקסט שנאמר.
AudioStreamOptions
מכיל את הפורמט של ערוץ האודיו שצפוי להיווצר על ידי מנוע.
מאפיינים
-
bufferSize
number
מספר הדגימות במאגר אודיו.
-
sampleRate
number
תדירות הדגימה הצפויה במאגר אודיו.
LanguageInstallStatus
סטטוס ההתקנה של קול.
Enum
"notInstalled"
"installing"
"installed"
"failed"
LanguageStatus
סטטוס ההתקנה של שפה.
מאפיינים
-
error
מחרוזת אופציונלי
פרטים על כשלים בהתקנה. אפשר לאכלס את השדה הזה אם התקנת השפה נכשלה.
-
installStatus
סטטוס ההתקנה.
-
lang
מחרוזת
מחרוזת שפה בפורמט קוד שפה-קוד אזור, כאשר אפשר להשמיט את האזור. דוגמאות: en, en-AU, zh-CH.
LanguageUninstallOptions
אפשרויות להסרת שפה מסוימת.
מאפיינים
-
uninstallImmediately
בוליאני
הערך True (נכון) אם לקוח ה-TTS רוצה שהשפה תוסר באופן מיידי. המנוע יכול לבחור אם להסיר את השפה ומתי לעשות זאת, על סמך הפרמטר הזה ופרטי מבצע הבקשה. אם הערך הוא false, יכול להיות שהמערכת תשתמש בקריטריונים אחרים, כמו שימוש לאחרונה, כדי לקבוע מתי להסיר את האפליקציה.
SpeakOptions
האפשרויות שצוינו לשיטה 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.
TtsClient
המזהה של הלקוח שמבקש את הסטטוס.
מאפיינים
-
id [מזהה]
מחרוזת
לקוח שולח בקשה לניהול שפה. בתוסף, זהו מזהה התוסף הייחודי. בתכונות של Chrome, זהו השם של התכונה שקריא לאנשים.
-
source
סוג מבקש הבקשה.
TtsClientSource
סוג מבקש הבקשה.
Enum
"chromefeature"
"extension"
VoiceGender
המאפיין 'מגדר' הוצא משימוש והמערכת תתעלם ממנו.
Enum
"male"
"female"
Methods
updateLanguage()
chrome.ttsEngine.updateLanguage(
status: LanguageStatus,
)
הפונקציה נקראת על ידי מנוע כשמתבצע ניסיון להתקנת שפה, וכשההתקנה של שפה מבוטלת. הקריאה מתבצעת גם בתגובה לבקשת סטטוס מלקוח. כשמתקינים או מסירים קול, המנוע צריך גם להפעיל את ttsEngine.updateVoices כדי לרשום את הקול.
פרמטרים
-
status
סטטוס ההתקנה של השפה.
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
הקריאה הזו מתבצעת על ידי מנוע כדי לעדכן את רשימת הקולות שלו. הרשימה הזו מבטלת את כל הקולות שהוגדרו במניפסט של התוסף.
פרמטרים
-
קולות
TtsVoice[]
מערך של אובייקטים מסוג
tts.TtsVoice
שמייצגים את הקולות הזמינים לסינתזת דיבור.
אירועים
onInstallLanguageRequest
chrome.ttsEngine.onInstallLanguageRequest.addListener(
callback: function,
)
האירוע הזה מופעל כשלקוח TTS מבקש להתקין שפה חדשה. המנוע אמור לנסות להוריד ולהתקין את השפה, ולקרוא ל-ttsEngine.updateLanguage עם התוצאה. אם הפעולה תתבצע בהצלחה, המנוע צריך גם לבצע קריאה ל-ttsEngine.updateVoices כדי לרשום את הקולות החדשים שזמינים.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:(requestor: TtsClient, lang: string) => void
-
מגיש הבקשה
-
lang
מחרוזת
-
onLanguageStatusRequest
chrome.ttsEngine.onLanguageStatusRequest.addListener(
callback: function,
)
האירוע מופעל כשלקוח TTS מבקש את סטטוס ההתקנה של שפה.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:(requestor: TtsClient, lang: string) => void
-
מגיש הבקשה
-
lang
מחרוזת
-
onPause
chrome.ttsEngine.onPause.addListener(
callback: function,
)
אופציונלי: אם מנוע תומך באירוע ההשהיה, הוא צריך להשהות את ההבעה הנוכחית שנאמרת, אם יש כזו, עד שהוא יקבל אירוע המשך או אירוע עצירה. לתשומת ליבכם: אירוע עצירה אמור גם לנקות את המצב מושהה.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:() => void
onResume
chrome.ttsEngine.onResume.addListener(
callback: function,
)
אופציונלי: אם מנוע תומך באירוע ההשהיה, הוא צריך לתמוך גם באירוע ההמשך, כדי להמשיך לדבר את ההבעה הנוכחית, אם יש כזו. לתשומת ליבכם: אירוע עצירה אמור גם לנקות את המצב מושהה.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:() => void
onSpeak
chrome.ttsEngine.onSpeak.addListener(
callback: function,
)
הפונקציה הזו נקראת כשהמשתמש מבצע קריאה ל-tts.speak() ואחת מהקולות מהמניפסט של התוסף הזה היא הראשונה שתתאים לאובייקט האפשרויות.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:(utterance: string, options: SpeakOptions, sendTtsEvent: function) => void
-
משפט
מחרוזת
-
אפשרויות
-
sendTtsEvent
פונקציה
הפרמטר
sendTtsEvent
נראה כך:(event: tts.TtsEvent) => void
-
אירוע
האירוע ממנוע המרת הטקסט לדיבור (TTS) שמציין את הסטטוס של ההבעה הזו.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
הפונקציה הזו נקראת כשהמשתמש מבצע קריאה ל-tts.speak() ואחת מהקולות מהמניפסט של התוסף הזה היא הראשונה שתתאים לאובייקט האפשרויות. ההבדל בין ttsEngine.onSpeak לבין ttsEngine.onSpeak הוא ש-Chrome מספק שירותי הפעלת אודיו ומטפל בשליחת אירועי TTS.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
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 והתוסף הזה עשוי להיות באמצע דיבור. אם תוסף מקבל קריאה ל-onStop והדיבור כבר הופסק, הוא לא אמור לעשות שום דבר (לא להעלות שגיאה). אם הדיבור נמצא במצב מושהה, הפעולה הזו אמורה לבטל את המצב המושהה.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:() => void
onUninstallLanguageRequest
chrome.ttsEngine.onUninstallLanguageRequest.addListener(
callback: function,
)
האירוע הזה מופעל כשלקוח TTS מציין ששפה מסוימת כבר לא נדרשת.
פרמטרים
-
קריאה חוזרת (callback)
פונקציה
הפרמטר
callback
נראה כך:(requestor: TtsClient, lang: string, uninstallOptions: LanguageUninstallOptions) => void
-
מגיש הבקשה
-
lang
מחרוזת
-
uninstallOptions
-