תיאור
צריך להשתמש ב-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
הם באותיות גמל: למשל, voiceName
, בניגוד לקובץ המניפסט שבו נעשה שימוש ב-voice_name
).
סוגי האירועים האפשריים שאפשר לשלוח תואמים לסוגי האירועים שמתקבלים בשיטת speak()
:
'start'
: המנוע התחיל לומר את הביטוי.'word'
: המערכת הגיעה לגבול של מילים. משתמשים ב-event.charIndex
כדי לקבוע את מיקום הדיבור הנוכחי.'sentence'
: הגעת לגבול של משפט. אפשר להשתמש ב-event.charIndex
כדי לקבוע את מיקום הדיבור הנוכחי.'marker'
: הגעה לסמן SSML. משתמשים ב-event.charIndex
כדי לקבוע את מיקום הדיבור הנוכחי.'end'
: המנוע סיים לומר את הביטוי.'error'
: אירעה שגיאה ספציפית למנוע ולא ניתן לומר את הביטוי הזה. ניתן להעביר מידע נוסף ב-event.errorMessage
.
האירועים 'interrupted'
ו-'cancelled'
לא נשלחים על ידי מנוע הדיבור. הם נוצרים על ידי Chrome באופן אוטומטי.
לקוחות של המרת טקסט לדיבור (TTS) יכולים לקבל את המידע הקולי מהמניפסט של התוסף על ידי התקשרות אל 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
מאגר הנתונים הזמני מהמנוע של המרת טקסט לדיבור (TTS). האורך שלו צריך להיות audioStreamOptions.bufferSize ומקודד כ-מונו, בכתובת audioStreamOptions.sampleRate, וכן בפורמט pcm ליניארי, מספר ממשי (float) חתום של 32 ביט, כלומר הסוג Float32Array ב-JavaScript.
-
charIndex
מספר אופציונלי
אינדקס התווים שמשויך למאגר הנתונים הזמני של האודיו.
-
isLastBuffer
בוליאני אופציונלי
True אם מאגר הנתונים הזמני של האודיו הוא האחרון של הטקסט שמוקרא.
AudioStreamOptions
הפורמט של שידור האודיו שצפוי להיווצר על ידי מנוע.
תכונות
-
bufferSize
מספר
מספר הדגימות בתוך מאגר אודיו.
-
sampleRate
מספר
תדירות הדגימה הצפויה במאגר נתונים זמני של אודיו.
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.
VoiceGender
המגדר הוצא משימוש והמערכת תתעלם ממנו.
טיפוסים בני מנייה (enum)
שיטות
updateVoices()
chrome.ttsEngine.updateVoices(
voices: TtsVoice[],
)
מנוע שהתקשרו אליו כדי לעדכן את רשימת הקולות שלו. הרשימה הזו מבטלת את הקולות שהוצהרו במניפסט של התוסף הזה.
פרמטרים
-
קולות
TtsVoice[]
מערך של אובייקטים
tts.TtsVoice
שמייצגים את הקולות הזמינים לסינתזת הדיבור.
אירועים
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
-
אירוע
האירוע ממנוע המרת הטקסט לדיבור שמציין את הסטטוס של הביטוי הזה.
-
-
onSpeakWithAudioStream
chrome.ttsEngine.onSpeakWithAudioStream.addListener(
callback: function,
)
הוא נקרא כשהמשתמש מבצע קריאה ל-tts.speak() , ואחד מהקולות במניפסט של התוסף הזה הוא הראשון שתואם לאובייקט האפשרויות. שונה מ-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