שפת סימון לסינתזת דיבור (SSML)

אתם יכולים לשלוח בקשה ל-Cloud Text-to-Speech עם Speech Synthesis Markup Language (SSML) כדי להתאים אישית את התשובה הקולית. כך תוכלו לציין פרטים על הפסקות, ועל עיצוב קולי של ראשי תיבות, תאריכים, שעות, קיצורים או טקסט שצריך לצנזר. מידע נוסף ודוגמאות קוד זמינים במדריך בנושא SSML ב-Cloud TTS.

בדוגמה הבאה מוצג תג SSML, ו-Cloud TTS מסנתז את הטקסט:

<speak>
  Here are <say-as interpret-as="characters">SSML</say-as> samples.
  I can pause <break time="3s"/>.
  I can play a sound
  <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>.
  I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>.
  Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line.
  Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>.
  I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>.
  Finally, I can speak a paragraph with two sentences.
  <p><s>This is sentence one.</s><s>This is sentence two.</s></p>
</speak>

הנה הטקסט שעבר סינתזה במסמך ה-SSML לדוגמה:

Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays].
I can speak in cardinals. Your number is ten.
Or I can speak in ordinals. You are tenth in line.
Or I can even speak in digits. The digits for ten are one oh.
I can also substitute phrases, like the World Wide Web Consortium.
Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.

‫Cloud TTS תומך בקבוצת משנה של תגי SSML הזמינים, שמתוארים בנושא הזה.

מידע נוסף על יצירת נתוני אודיו מקלט SSML באמצעות Cloud TTS זמין במאמר יצירת קובצי אודיו של קולות.

נסו בעצמכם

אנחנו ממליצים למשתמשים חדשים ב-Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של Cloud TTS בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300 $להרצה, לבדיקה ולפריסה של עומסי העבודה.

להתנסות ב-Cloud TTS בחינם

טיפים לשימוש ב-SSML

בהתאם להטמעה, יכול להיות שתצטרכו להשתמש בתו בריחה כדי להוסיף מרכאות או גרשיים למטען הייעודי (payload) של SSML שאתם שולחים ל-Cloud TTS. בדוגמה הבאה מוצג פורמט של קלט SSML שכלול באובייקט JSON.

"{
    'input':{
     'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as>
          standard <break time=\"1s\"/>is defined by the
          <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>'
    },
    'voice':{
      'languageCode':'en-us',
      'name':'en-US-Standard-B',
      'ssmlGender':'MALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }"

תווים שמורים

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

המשמעות של "על סמך תווים" קוד בריחה
" &quot;
& &amp;
' &apos;
> &lt;
> &gt;

בחירת קול

אפשר להגדיר את הקול באובייקט VoiceSelectionParams. במדריך ל-SSML של Text-to-Speech יש דוגמת קוד שממחישה את השימוש באובייקט VoiceSelectionParams.

אפשר להשתמש בתג <voice> כדי לקרוא SSML בכמה קולות, אבל צריך להגדיר את שם VoiceSelectionParams לקול תואם:

סוג הקול המבוקש הקלדה קולית נתמכת בתג <voice>
Neural2 Studio Wavenet חדשות רגילה
Neural2
Studio
Wavenet
רגילה
חדשות

תמיכה ברכיבי SSML

בקטעים הבאים מפורטים רכיבי ה-SSML והאפשרויות שבהם אפשר להשתמש בפעולות שלכם.

<speak>

רכיב הבסיס של תגובת ה-SSML.

מידע נוסף על רכיב speak זמין במפרט של W3.

דוגמה

<speak>
  my SSML content
</speak>

<break>

רכיב ריק ששולט בהשהיה או בגבולות פרוזודיים אחרים בין מילים. השימוש ב-<break> בין כל צמד של טוקנים הוא אופציונלי. אם הרכיב הזה לא מופיע בין המילים, ההפסקה נקבעת אוטומטית על סמך ההקשר הלשוני.

מידע נוסף על רכיב break זמין במפרט של W3.

מאפיינים

מאפיין תיאור
time

מגדיר את אורך ההפסקה בשניות או באלפיות השנייה (לדוגמה, 3s או 250ms).

strength

הגדרה של עוצמת ההפסקה הפרוזודית בפלט במונחים יחסיים. הערכים התקינים הם: x-weak,‏ weak,‏ medium,‏ strong ו-x-strong. הערך none מציין שלא צריך להוציא פלט של גבול הפסקה פרוסודית, ואפשר להשתמש בו כדי למנוע הפסקה פרוסודית שהמעבד היה יוצר אחרת. הערכים האחרים מציינים את חוזק השבירה שאינו יורד באופן מונוטוני (כלומר, עולה באופן מונוטוני) בין הטוקנים. בדרך כלל, הגבולות החזקים מלווים בהפסקות.

דוגמה

בדוגמה הבאה אפשר לראות איך משתמשים ברכיב <break> כדי להשהות בין שלבים:

<speak>
  Step 1, take a deep breath. <break time="200ms"/>
  Step 2, exhale.
  Step 3, take a deep breath again. <break strength="weak"/>
  Step 4, exhale.
</speak>

<say‑as>

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

לרכיב <say‑as> יש את מאפיין החובה interpret-as, שקובע איך הערך יושמע. אפשר להשתמש במאפיינים האופציונליים format ו-detail בהתאם לערך הספציפי של interpret-as.

דוגמאות

interpret-as המאפיין תומך בערכים הבאים:

  • currency

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

    <speak>
      <say-as interpret-as='currency' language='en-US'>$42.01</say-as>
    </speak>
        
  • telephone

    אפשר לעיין בתיאור של interpret-as='telephone' בהערה של קבוצת העבודה W3C SSML 1.0 say-as attribute values.

    בדוגמה הבאה, המספר נאמר כך: "one eight zero zero two zero two one two one two". אם משמיטים את המאפיין google:style, המערכת תגיד אפס במקום האות O.

    המאפיין google:style='zero-as-zero' פועל כרגע רק בלוקאלים של EN.

          <speak>
            <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as>
          </speak>
        
  • verbatim או spell-out

    בדוגמה הבאה, כל אות מאויתת:

    <speak>
      <say-as interpret-as="verbatim">abcdefg</say-as>
    </speak>
        
  • date

    המאפיין format הוא רצף של קודי תווים של שדות תאריך. קודי התווים הנתמכים בשדה format הם {y, m, d} עבור שנה, חודש ויום (בחודש) בהתאמה. אם קוד השדה מופיע פעם אחת עבור שנה, חודש או יום, אז מספר הספרות הצפוי הוא 4, 2 ו-2 בהתאמה. אם קוד השדה חוזר על עצמו, מספר הספרות הצפוי הוא מספר הפעמים שהקוד חוזר על עצמו. יכול להיות ששדות הטקסט של התאריך יופרדו באמצעות סימני פיסוק או רווחים.

    המאפיין detail קובע את הצורה המדוברת של התאריך. במקרה של detail='1', חובה למלא רק את שדות היום ואחד משדות החודש או השנה, אבל אפשר למלא את שניהם. זוהי ברירת המחדל אם לא מציינים את כל שלושת השדות. הצורה המדוברת היא "The {ordinal day} of {month}, {year}".

    הדוגמה הבאה נאמרת כך: "העשירי בספטמבר, אלף תשע מאות שישים":

    <speak>
      <say-as interpret-as="date" format="yyyymmdd" detail="1">
        1960-09-10
      </say-as>
    </speak>
        

    הדוגמה הבאה נאמרת כ-"The tenth of September":

    <speak>
      <say-as interpret-as="date" format="dm">10-9</say-as>
    </speak>
        

    detail='2' בשדות של היום, החודש והשנה חובה לציין ערכים, וזוהי ברירת המחדל כשמציינים ערכים בכל שלושת השדות. הצורה המדוברת היא ‎ "{month} {ordinal day}, {year}"‎.

    הדוגמה הבאה נאמרת כך: "September tenth, nineteen sixty":

    <speak>
      <say-as interpret-as="date" format="dmy" detail="2">
        10-9-1960
      </say-as>
    </speak>
        
  • characters

    בדוגמה הבאה, אומרים "C A N":

    <speak>
      <say-as interpret-as="characters">can</say-as>
    </speak>
        
  • cardinal

    בדוגמה הבאה, המספר נאמר כ-"Twelve thousand three hundred forty five" (באנגלית אמריקאית) או כ-"Twelve thousand three hundred and forty five" (באנגלית בריטית):

    <speak>
      <say-as interpret-as="cardinal">12345</say-as>
    </speak>
        
  • ordinal

    בדוגמה הבאה, המילה שנאמרת היא First:

    <speak>
      <say-as interpret-as="ordinal">1</say-as>
    </speak>
        
  • fraction

    בדוגמה הבאה, המספר הוא "חמש וחצי":

    <speak>
      <say-as interpret-as="fraction">5+1/2</say-as>
    </speak>
        
  • expletive או bleep

    הדוגמה הבאה מושמעת כצפצוף, כאילו היא עברה צנזורה:

    <speak>
      <say-as interpret-as="expletive">censor this</say-as>
    </speak>
        
  • unit

    הפונקציה ממירה יחידות ליחיד או לרבים בהתאם למספר. בדוגמה הבאה, אומרים "10 feet":

    <speak>
      <say-as interpret-as="unit">10 foot</say-as>
    </speak>
        
  • time

    הדוגמה הבאה נאמרת כ-"Two thirty P.M.":

    <speak>
      <say-as interpret-as="time" format="hms12">2:30pm</say-as>
    </speak>
        

    המאפיין format הוא רצף של קודי תווים של שדות זמן. קודי התווים של השדות שנתמכים ב-format הם {h,m, s, Z, 12, 24} לשעה, לדקה (בשעה), לשנייה (בדקה), לאזור זמן, לשעה בפורמט של 12 שעות ולשעה בפורמט של 24 שעות, בהתאמה. אם קוד השדה מופיע פעם אחת בשעה, בדקה או בשנייה, אז מספר הספרות הצפוי הוא 1, 2 ו-2 בהתאמה. אם קוד השדה חוזר על עצמו, מספר הספרות הצפוי הוא מספר הפעמים שהקוד חוזר על עצמו. יכול להיות שיהיו סימני פיסוק ו/או רווחים בין השדות בטקסט של השעה. אם השעה, הדקה או השנייה לא צוינו בפורמט או שאין ספרות תואמות, השדה נחשב כערך אפס. ברירת המחדל format היא hms12.

    המאפיין detail קובע אם השעה תיאמר בפורמט של 12 שעות או בפורמט של 24 שעות. הפורמט של השעה הוא פורמט של 24 שעות אם detail='1' או אם detail מושמט. השעה תהיה בפורמט של 12 שעות אם detail='2' או אם detail לא מצוינים והפורמט של השעה הוא פורמט של 12 שעות.

מידע נוסף על רכיב say-as זמין במפרט של W3.

<audio>

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

מאפיינים

מאפיין חובה ברירת מחדל ערכים
src כן לא רלוונטי ‫URI שמפנה למקור של מדיה אודיו. הפרוטוקול הנתמך הוא https.
clipBegin לא 0 TimeDesignation שהוא ההיסט מתחילת מקור האודיו שממנו מתחילה ההפעלה. אם הערך הזה גדול ממשך האודיו בפועל או שווה לו, לא יוכנס אודיו.
clipEnd לא אינסוף TimeDesignation שמייצג את ההיסט מתחילת מקור האודיו ועד לסיום ההפעלה. אם משך הזמן בפועל של מקור האודיו קצר מהערך הזה, ההפעלה מסתיימת בזמן הזה. אם clipBegin גדול מ-clipEnd או שווה לו, לא מוסיפים אודיו.
speed לא 100% יחס קצב ההפעלה של הפלט לקצב הקלט הרגיל, שמוצג באחוזים. הפורמט הוא מספר ממשי חיובי ואחריו הסימן %. הטווח הנתמך כרגע הוא [‎50% (איטי – חצי מהמהירות), ‎200% (מהיר – כפול מהמהירות)]. יכול להיות שערכים מחוץ לטווח הזה ישונו כך שיהיו בתוכו (או שלא).
repeatCount לא ‫1 או 10 אם המדיניות repeatDur מוגדרת מספר ממשי שמציין כמה פעמים להוסיף את האודיו (אחרי חיתוך, אם יש, באמצעות clipBegin או clipEnd). לא ניתן להשתמש בשברים, ולכן הערך יעוגל למספר השלם הקרוב ביותר. הערך אפס לא חוקי ולכן המערכת מתייחסת אליו כאילו לא צוין ערך, ומשתמשת בערך ברירת המחדל.
repeatDur לא אינסוף TimeDesignation שהוא מגבלה על משך האודיו שמוסיפים אחרי שהמקור עובר עיבוד למאפיינים clipBegin,‏ clipEnd,‏ repeatCount ו-speed (במקום משך ההפעלה הרגיל). אם משך הזמן של האודיו שעבר עיבוד קצר מהערך הזה, ההפעלה מסתיימת בזמן הזה.
soundLevel לא +0dB שינוי עוצמת הקול של האודיו ב-soundLevel דציבלים. הטווח המקסימלי הוא ‎+/-40dB, אבל הטווח בפועל עשוי להיות קטן יותר, ואיכות הפלט עשויה שלא להניב תוצאות טובות בכל הטווח.

אלה ההגדרות הנתמכות כרגע לאודיו:

  • פורמט: MP3‏ (MPEG v2)
    • ‫24,000 דגימות לשנייה
    • ‫24K עד 96K ביטים לשנייה, קצב קבוע
  • פורמט: Opus ב-Ogg
    • ‫24,000 דגימות לשנייה (סופר-פס רחב)
    • ‫24K עד 96K ביטים לשנייה, קצב קבוע
  • פורמט (הוצא משימוש): WAV (RIFF)
    • PCM 16-bit signed, little endian
    • ‫24,000 דגימות לשנייה
  • לכל הפורמטים:
    • מומלץ להשתמש בערוץ יחיד, אבל אפשר להשתמש גם בסטריאו.
    • משך הזמן המקסימלי הוא 240 שניות. אם רוצים להפעיל אודיו למשך זמן ארוך יותר, כדאי להטמיע תגובה עם מדיה.
    • מגבלת גודל הקובץ היא 5 מגה-בייט.
    • כתובת ה-URL של המקור חייבת להשתמש בפרוטוקול HTTPS.
    • ה-UserAgent שלנו כשמאחזרים את האודיו הוא Google-Speech-Actions.

התוכן של רכיב <audio> הוא אופציונלי, והוא משמש אם אי אפשר להפעיל את קובץ האודיו או אם מכשיר הפלט לא תומך באודיו. התוכן יכול לכלול רכיב <desc>, ובמקרה כזה התוכן הטקסטואלי של הרכיב הזה ישמש לתצוגה. מידע נוסף זמין בקטע 'אודיו מוקלט' ברשימת המשימות לביצוע בנושא תגובות.

כתובת ה-URL של src חייבת להיות גם כתובת URL מסוג HTTPS (אפשר לארח את קובצי האודיו בכתובת URL מסוג HTTPS ב-Google Cloud Storage).

מידע נוסף על תגובות עם מדיה מופיע בקטע תגובות עם מדיה במדריך לתגובות.

מידע נוסף על רכיב audio זמין במפרט של W3.

דוגמה

<speak>
  <audio src="cat_purr_close.ogg">
    <desc>a cat purring</desc>
    PURR (sound didn't load)
  </audio>
</speak>

<p>,<s>

אלמנטים של משפטים ופסקאות.

מידע נוסף על רכיבי p ו-s זמין במפרט W3.

דוגמה

<p><s>This is sentence one.</s><s>This is sentence two.</s></p>

שיטות מומלצות

  • כדאי להשתמש בתגי <s>…</s> כדי לתחום משפטים שלמים, במיוחד אם הם מכילים רכיבי SSML שמשנים את המלודיה (כלומר, <audio>,‏ <break>,‏ <emphasis>,‏ <par>,‏ <prosody>,‏ <say-as>,‏ <seq> ו-<sub>).
  • אם רוצים להוסיף הפסקה ארוכה מספיק כדי שיהיה אפשר לשמוע אותה, צריך להשתמש בתגי <s>...</s> ולהוסיף את ההפסקה בין המשפטים.

<sub>

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

אפשר גם להשתמש ברכיב sub כדי לספק הגייה פשוטה של מילה שקשה לקרוא. בדוגמה האחרונה שבהמשך מוצג תרחיש השימוש הזה ביפנית.

מידע נוסף על רכיב sub זמין במפרט של W3.

דוגמאות

<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>

<mark>

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

מידע נוסף על רכיב mark זמין במפרט של W3.

דוגמה

<speak>
Go from <mark name="here"/> here, to <mark name="there"/> there!
</speak>

<prosody>

התג הזה משמש להתאמה אישית של גובה הצליל, קצב הדיבור והעוצמה של הטקסט שמופיע בתוך הרכיב. בשלב הזה, יש תמיכה במאפיינים rate, pitch ו-volume.

אפשר להגדיר את המאפיינים rate ו-volume בהתאם למפרטים של W3. יש שלוש אפשרויות להגדרת הערך של מאפיין pitch:

מאפיין תיאור
name

מזהה המחרוזת של כל סימן.

אפשרות תיאור
קרוב-משפחה מציינים ערך יחסי (למשל, 'נמוך', 'בינוני', 'גבוה' וכו'), כאשר 'בינוני' הוא גובה הצליל שמוגדר כברירת מחדל.
חצאי טונים הגבהה או הנמכה של גובה הצליל ב-N חצאי טונים באמצעות '+Nst' או '-Nst' בהתאמה. שימו לב שחובה להשתמש בסימנים '+/-' ובקיצור 'st'.
אחוז כדי להגביר או להנמיך את גובה הצליל ב-N אחוזים, משתמשים בערך ‎+N%‎ או ‎-N%‎ בהתאמה. שימו לב שחובה להשתמש בסימן '%', אבל לא חייבים להשתמש בסימנים '+' או '-'.

מידע נוסף על רכיב prosody זמין במפרט של W3.

דוגמה

בדוגמה הבאה משתמשים ברכיב <prosody> כדי לדבר לאט יותר, ב-2 חצאי טון מתחת לרגיל:

<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>

<emphasis>

משמש להוספה או להסרה של הדגשה מטקסט שנכלל ברכיב. האלמנט <emphasis> משנה את הדיבור באופן דומה לאלמנט <prosody>, אבל בלי הצורך להגדיר מאפייני דיבור ספציפיים.

הרכיב הזה תומך במאפיין אופציונלי בשם level עם הערכים התקפים הבאים:

  • strong
  • moderate
  • none
  • reduced

מידע נוסף על רכיב emphasis זמין במפרט של W3.

דוגמה

בדוגמה הבאה משתמשים ברכיב <emphasis> כדי להקריא הודעה:

<emphasis level="moderate">This is an important announcement</emphasis>

<par>

קונטיינר מדיה מקביל שמאפשר להפעיל כמה רכיבי מדיה בו-זמנית. התוכן היחיד שמותר הוא קבוצה של רכיב <par> אחד או יותר, רכיב <seq> אחד או יותר ורכיב <media> אחד או יותר. אין חשיבות לסדר של רכיבי <media>.

אלא אם רכיב צאצא מציין שעת התחלה שונה, שעת ההתחלה המרומזת של הרכיב זהה לשעת ההתחלה של הקונטיינר <par>. אם לרכיב צאצא מוגדר ערך היסט במאפיין begin או end, ההיסט של הרכיב יהיה ביחס לזמן ההתחלה של רכיב המאגר <par>. במקרה של רכיב הבסיס <par>, המערכת מתעלמת מהמאפיין begin, והזמן שבו מתחיל תהליך סינתזת הדיבור של SSML הוא הזמן שבו מתחילה יצירת הפלט עבור רכיב הבסיס <par> (כלומר, למעשה הזמן 'אפס').

דוגמה

<speak>
  <par>
    <media xml:id="question" begin="0.5s">
      <speak>Who invented the Internet?</speak>
    </media>
    <media xml:id="answer" begin="question.end+2.0s">
      <speak>The Internet was invented by cats.</speak>
    </media>
    <media begin="answer.end-0.2s" soundLevel="-6dB">
      <audio
        src="https://actions.google.com/.../cartoon_boing.ogg"/>
    </media>
    <media repeatCount="3" soundLevel="+2.28dB"
      fadeInDur="2s" fadeOutDur="0.2s">
      <audio
        src="https://actions.google.com/.../cat_purr_close.ogg"/>
    </media>
  </par>
</speak>

<seq>

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

אפשר להגדיר את מאפייני begin ו-end של רכיבי צאצא כערכי היסט (ראו הגדרת זמן בהמשך). ערכי ההיסט של רכיבי הצאצא האלה יהיו יחסי לסוף של הרכיב הקודם ברצף, או במקרה של הרכיב הראשון ברצף, יחסי להתחלה של הקונטיינר <seq> שלו.

דוגמה

<speak>
  <seq>
    <media begin="0.5s">
      <speak>Who invented the Internet?</speak>
    </media>
    <media begin="2.0s">
      <speak>The Internet was invented by cats.</speak>
    </media>
    <media soundLevel="-6dB">
      <audio
        src="https://actions.google.com/.../cartoon_boing.ogg"/>
    </media>
    <media repeatCount="3" soundLevel="+2.28dB"
      fadeInDur="2s" fadeOutDur="0.2s">
      <audio
        src="https://actions.google.com/.../cat_purr_close.ogg"/>
    </media>
  </seq>
</speak>

<media>

מייצג שכבת מדיה ברכיב <par> או <seq>. התוכן המותר של רכיב <media> הוא רכיב SSML <speak> או <audio>. בטבלה הבאה מפורטים המאפיינים התקינים של רכיב <media>.

מאפיינים

מאפיין חובה ברירת מחדל ערכים
xml:id לא אין ערך מזהה XML ייחודי של הרכיב הזה. אין תמיכה בישויות מקודדות. ערכי המזהה המותרים תואמים לביטוי הרגולרי "([-_#]|\p{L}|\p{D})+". מידע נוסף זמין במאמר בנושא XML-ID.
begin לא 0 שעת ההתחלה של מאגר המדיה הזה. התכונה הזו מתעלמת אם זהו אלמנט המדיה הראשי (ההתנהגות זהה לערך ברירת המחדל 0). בקטע ציון זמן שבהמשך מפורטים ערכי המחרוזת התקינים.
end לא אין ערך מפרט של שעת הסיום של מאגר המדיה הזה. בקטע ציון זמן שבהמשך מפורטים ערכי המחרוזת התקינים.
repeatCount לא 1 מספר ממשי שמציין כמה פעמים להוסיף את המדיה. אין תמיכה בחזרות חלקיות, ולכן הערך יעוגל למספר השלם הקרוב ביותר. הערך אפס לא חוקי ולכן המערכת מתייחסת אליו כאילו לא צוין ערך, ומשתמשת בערך ברירת המחדל.
repeatDur לא אין ערך TimeDesignation שמגדיר מגבלה על משך הזמן של המדיה שמוסיפים. אם משך הזמן של המדיה קצר מהערך הזה, ההפעלה מסתיימת בזמן הזה.
soundLevel לא +0dB שינוי עוצמת הקול של האודיו ב-soundLevel דציבלים. הטווח המקסימלי הוא ‎+/-40dB, אבל הטווח בפועל עשוי להיות קטן יותר, ואיכות הפלט עשויה שלא להניב תוצאות טובות בכל הטווח.
fadeInDur לא ‫0 שניות TimeDesignation שקובע את משך הזמן שבו עוצמת הקול של המדיה תעלה בהדרגה מאפס עד לערך soundLevel שצוין כאופציונלי. אם משך הזמן של המדיה קצר מהערך הזה, ההנחתה תסתיים בסוף ההפעלה ועוצמת הקול לא תגיע לרמה שצוינה.
fadeOutDur לא ‫0 שניות TimeDesignation שקובע את משך הזמן שבו המדיה תדעך מהערך האופציונלי שצוין soundLevel עד שהיא תהיה שקטה. אם משך הזמן של המדיה קצר מהערך הזה, רמת הקול מוגדרת לערך נמוך יותר כדי להבטיח שיושג שקט בסוף ההפעלה.

ציון הזמן

מפרט זמן, שמשמש לערך של מאפייני begin ו-end של רכיבי <media> ושל מאגרי מדיה (רכיבי <par> ו-<seq>), הוא ערך offset (לדוגמה, +2.5s) או ערך syncbase (לדוגמה, foo_id.end-250ms).

  • ערך ההיסט – ערך ההיסט של הזמן הוא ערך של ספירת זמן ב-SMIL, שמותרים בו ערכים שתואמים לביטוי הרגולרי: "\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    מחרוזת הספרות הראשונה היא החלק השלם של המספר העשרוני, ומחרוזת הספרות השנייה היא החלק השברי העשרוני. סימן ברירת המחדל (כלומר, "(+|-)?") הוא "+". ערכי היחידות תואמים לשעות, דקות, שניות ואלפיות השנייה בהתאמה. ברירת המחדל של היחידות היא s (שניות).

  • ערך syncbase – ערך syncbase הוא ערך syncbase-value של SMIL שמאפשר ערכים שתואמים לביטוי הרגולרי: "([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    הספרות והיחידות מפורשות באותו אופן כמו ערך של היסט.

<phoneme>

אפשר להשתמש בתג <phoneme> כדי ליצור הגייה מותאמת אישית של מילים בשורה. ‫Cloud TTS מקבל את האלפבית הפונטי IPA ואת האלפבית הפונטי X-SAMPA. בדף הפונמות מופיעה רשימה של השפות והפונמות הנתמכות.

כל שימוש בתג <phoneme> מכוון את ההגייה של מילה אחת:

  <phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme>
  <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>

סמני לחץ

יש עד שלוש רמות של הדגשה שאפשר להוסיף לתמליל:

  1. ההברה המוטעמת העיקרית: מסומנת ב-‎ /ˈ/ ב-IPA וב-‎ /"/ ב-X-SAMPA.
  2. הדגשה משנית: מסומנת ב-‎ /ˌ/ ב-IPA וב-‎ /%/ ב-X-SAMPA.
  3. לא מוטעמת: לא מסומנת בסמל (באף אחת מהשיטות).

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

מילה לדוגמה IPA X-SAMPA
מים ˈwɑːtɚ "wA:t@`
מתחת למים ˌʌndɚˈwɑːtɚ %Vnd@"wA:t@

תמלול רחב לעומת תמלול מצומצם

כלל אצבע מומלץ הוא להשתמש בתעתיקים רחבים יותר ופונמיים. לדוגמה, באנגלית אמריקאית, תמלול של /t/ בין תנועות (במקום להשתמש ב-tap):

מילה לדוגמה IPA X-SAMPA
חמאה ˈbʌtɚ במקום ˈbʌɾɚ ‫"bVt@` במקום "bV4@`

יש מקרים שבהם השימוש בייצוג הפונמי גורם לתוצאות ה-TTS להישמע לא טבעיות (לדוגמה, אם רצף הפונמות קשה להגייה מבחינה אנטומית).

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

מילה לדוגמה IPA X-SAMPA
חתולים ˈkæts ‪"k{ts
כלבים ‫ˈdɑːgz במקום ˈdɑːgs ‫dA:gz במקום dA:gs

צמצום

כל הברה חייבת להכיל תנועה אחת (ורק אחת). כלומר, צריך להימנע מהעיצורים ההברתיים ולתעתק אותם עם תנועה מופחתת. לדוגמה:

מילה לדוגמה IPA X-SAMPA
חתלתול ‫ˈkɪtən במקום ˈkɪtn ‫kIt@n במקום kitn
קומקום ˈkɛtəl במקום ˈkɛtl ‫kEt@l במקום kEtl

חלוקה להברות

אפשר לציין גבולות בין הברות באמצעות /./. כל הברה חייבת להכיל תנועה אחת (ורק אחת). לדוגמה:

מילה לדוגמה IPA X-SAMPA
קריאוּת ˌɹיː.də.ˈבִ.lə.טיː %r\i:.d@."bI.l@.ti:

מילון הגייה בהתאמה אישית

במקום לספק הגייה בשורה עם התג phoneme, אפשר לספק מילון של הגדרות הגייה מותאמות אישית ב-RPC של סינתזת הדיבור. כשמילון ההגייה המותאם אישית נמצא בבקשה, טקסט הקלט ישתנה באופן אוטומטי באמצעות תג ה-SSML‏ phoneme.

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

הקלט המקורי:

input: {
  text: 'Hello world! It is indeed a beautiful world!',
  custom_pronunciations: {
    pronunciations: {
      phrase: 'world'
      phonetic_encoding: PHONETIC_ENCODING_IPA
      pronunciation: 'wɜːld'
    }
  }
}

קלט שעבר טרנספורמציה:

input: {
  ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>'
}

משכי זמן

‫Cloud Text-to-Speech תומך ב-<say-as interpret-as="duration"> כדי לקרוא משכי זמן בצורה נכונה. לדוגמה, הדוגמה הבאה תבוטא כך: "five hours and thirty minutes":

<say-as interpret-as="duration" format="h:m">5:30</say-as>

מחרוזת הפורמט תומכת בערכים הבאים:

קיצור ערך
שע' שעות
m דקות
s seconds
ms אלפיות שנייה

<voice>

התג <voice> מאפשר להשתמש ביותר מקול אחד בבקשת SSML אחת. בדוגמה הבאה, קול ברירת המחדל הוא קול גברי באנגלית. כל המילים יסונתזו בקול הזה, חוץ מהמילים "qu'est-ce qui t'amène ici", שיושמעו בצרפתית בקול של נקבה במקום בשפת ברירת המחדל (אנגלית) ובמקום בקול של זכר.

<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui
t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>

אפשר גם להשתמש בתג <voice> כדי לציין קול ספציפי (שם הקול בדף הקולות הנתמכים) במקום לציין language או gender:

<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est
mignon</voice><break time="250ms"/> said a pet shop
owner</speak>

כשמשתמשים בתג <voice>, מערכת Cloud TTS מצפה לקבל name (שם הקול שרוצים להשתמש בו) או שילוב של המאפיינים הבאים. כל שלושת המאפיינים הם אופציונליים, אבל אם לא מציינים את מאפיין name, צריך לציין לפחות אחד מהם.

  • gender: אחת מהאפשרויות male (זכר), female (נקבה) או neutral (ניטרלי).
  • variant: משמש להכרעה במקרים שבהם יש כמה אפשרויות לגבי הקול שבו יש להשתמש על סמך ההגדרה.
  • language: השפה הרצויה. אפשר לציין רק שפה אחת בתג <voice> נתון. מציינים את השפה בפורמט BCP-47. אפשר למצוא את קוד BCP-47 של השפה בעמודה קוד שפה בדף השפות והקולות הנתמכים.

אפשר גם לקבוע את העדיפות היחסית של כל אחד מהמאפיינים gender, variant ו-language באמצעות שני תגים נוספים: required ו-ordering.

  • required: אם מאפיין מוגדר כ-required ולא מוגדר בצורה נכונה, הבקשה תיכשל.
  • ordering: כל המאפיינים שמפורטים אחרי תג ordering נחשבים למאפיינים מועדפים ולא למאפייני חובה. ‫Cloud Text-to-Speech API מתייחס למאפיינים מועדפים על בסיס האפשרות הטובה ביותר, לפי הסדר שבו הם מופיעים אחרי התג ordering. אם יש מאפיינים מועדפים שהוגדרו בצורה שגויה, יכול להיות ש-Cloud TTS עדיין יחזיר קול תקין, אבל בלי ההגדרה השגויה.

דוגמאות להגדרות באמצעות התגים required ו-ordering:

<speak>And there it was <voice language="en-GB" gender="male" required="gender"
ordering="gender language">a flying bird </voice>roaring in the skies for the
first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female"
ordering="language gender">Sunday Funday.</voice></speak>

<lang>

אתם יכולים להשתמש ב-<lang> כדי לכלול טקסט בכמה שפות באותה בקשת SSML. כל השפות יסונתזו באותו קול, אלא אם משתמשים בתג <voice> כדי לשנות את הקול באופן מפורש. המחרוזת xml:lang צריכה להכיל את שפת היעד בפורמט BCP-47 (הערך הזה מופיע כ'קוד שפה' בטבלה של הקולות הנתמכים). בדוגמה הבאה, המילה chat תיאמר בצרפתית במקום בשפת ברירת המחדל (אנגלית):

<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>

‫Cloud Text-to-Speech תומך בתג <lang> על בסיס האפשרות הטובה ביותר. לא כל השילובים של שפות מניבים תוצאות באיכות זהה אם מציינים אותם באותה בקשת SSML. במקרים מסוימים, שילוב של שפות עשוי ליצור אפקט שאפשר לזהות אותו אבל הוא עדין או נתפס כשלילי. בעיות מוכרות:

  • התג <lang> לא תומך ביפנית עם תווים של קאנג'י. הקלט מתועתק ומוקרא כתווים סיניים.
  • אין תמיכה בשפות שמיות כמו ערבית, עברית ופרסית בתג <lang>, והשימוש בו יגרום להשמעה של שקט. אם רוצים להשתמש באחת מהשפות האלה, מומלץ להשתמש בתג <voice> כדי לעבור לקול שמדבר בשפה הרצויה (אם היא זמינה).

נקודות זמן ב-SSML

‫Text-to-Speech API תומך בשימוש בנקודות זמן בנתוני האודיו שנוצרו. נקודת זמן היא חותמת זמן (בשניות, שנמדדת מתחילת האודיו שנוצר) שמתאימה לנקודה מיועדת בסקריפט. אפשר להגדיר נקודת זמן בסקריפט באמצעות התג <mark>. כשיוצרים את האודיו, ה-API מחזיר את הזמן שחלף בין תחילת האודיו לבין נקודת הזמן.

יש שני שלבים להגדרת נקודת זמן:

  1. מוסיפים תג SSML‏ <mark> לנקודה בתסריט שרוצים להוסיף לה חותמת זמן.
  2. מגדירים את TimepointType לערך SSML_MARK. אם השדה הזה לא מוגדר, כברירת מחדל לא מוחזרות נקודות זמן.

בדוגמה הבאה מוחזרות שתי נקודות זמן:

  • ‫timepoint_1: מציין את השעה (בשניות) שבה המילה Mark מופיעה באודיו שנוצר.
  • ‫timepoint_2: מציין את השעה (בשניות) שבה המילה 'see' מופיעה באודיו שנוצר.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark
name="timepoint_2"/> see you.</speak>

סגנונות

הקולות הבאים יכולים לדבר בכמה סגנונות:

  1. en-US-Neural2-F
  2. en-US-Neural2-J

משתמשים בתג <google:style> כדי לקבוע באיזה סגנון להשתמש. משתמשים בתג רק סביב משפטים מלאים.

דוגמה:

<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>

בשדה name אפשר להזין את הערכים הבאים:

  1. apologetic
  2. calm
  3. empathetic
  4. firm
  5. lively