SSML

เมื่อตอบกลับไปยัง Google Assistant คุณจะใช้ ภาษามาร์กอัปการสังเคราะห์เสียง (SSML) ในคำตอบของคุณ โดย การใช้ SSML คุณจะสามารถทำให้การตอบกลับการสนทนาของคุณดูเป็นธรรมชาติมากขึ้น คำพูด ตัวอย่างต่อไปนี้แสดงมาร์กอัป SSML และเสียงที่เกี่ยวข้องจาก Google Assistant

Node.js

function saySSML(conv) {
  const ssml = '<speak>' +
    'Here are <say-as interpret-as="characters">SSML</say-as> samples. ' +
    'I can pause <break time="3" />. ' +
    'I can play a sound <audio src="https://www.example.com/MY_WAVE_FILE.wav">your wave file</audio>. ' +
    'I can speak in cardinals. Your position is <say-as interpret-as="cardinal">10</say-as> in line. ' +
    '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. Your position in line is <say-as interpret-as="digits">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>';
  conv.add(ssml);
}

JSON

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "<speak>Here are <say-as interpret-as=\"characters\">SSML</say-as> samples. I can pause <break time=\"3\" />. I can play a sound <audio src=\"https://www.example.com/MY_WAVE_FILE.wav\">your wave file</audio>. I can speak in cardinals. Your position is <say-as interpret-as=\"cardinal\">10</say-as> in line. 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. Your position in line is <say-as interpret-as=\"digits\">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>"
              }
            }
          ]
        }
      }
    }
  ]
}

เสียง

URL ใน SSML

เมื่อกำหนดการตอบกลับ SSML ที่มีเฉพาะ URL เท่านั้น เครื่องหมายและ (&) ใน URL นั้น อาจทำให้เกิดปัญหาเนื่องจากการจัดรูปแบบ XML เพื่อให้มั่นใจว่า URL ถูกต้อง มีการอ้างอิง แทนที่อินสแตนซ์ของ & ด้วย &amp;

แม้ว่าการตอบกลับ SSML จะมีเพียง URL แต่ Actions on Google กำหนดให้มี แสดงข้อความสำหรับคำตอบ เนื่องจากข้อความในแท็ก <audio> จะไม่ Assistant พูดได้ คุณสามารถแทรกข้อความฟิลเลอร์หรือคำอธิบายสั้นๆ ใน <audio> เพื่อให้เป็นไปตามข้อกำหนดนี้ ข้อความภายในแท็ก <audio> จะไม่ Assistant พูดหลังจากที่เสียงเล่น และพบกับ Actions on Google ข้อกำหนดสำหรับ SSML เวอร์ชันข้อความที่แสดง

ตัวอย่างการตอบกลับ SSML ที่มีปัญหามีดังนี้

<speak>
  <audio src="https://firebasestorage.googleapis.com/v0/b/project-name.appspot.com/o/audio-file-name.ogg?alt=media&token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
  </audio>
</speak>

ตัวอย่างข้างต้นไม่ได้ใช้ Escape & สำหรับการจัดรูปแบบ XML ที่เหมาะสม

เวอร์ชันที่แก้ไขแล้วของการตอบกลับ SSML เดียวกันมีลักษณะดังนี้

<speak>
  <audio src="https://firebasestorage.googleapis.com/v0/b/project-name.appspot.com/o/audio-file-name.ogg?alt=media&amp;token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
  text
  </audio>
</speak>

การรองรับองค์ประกอบ SSML

ส่วนต่อไปนี้จะอธิบายองค์ประกอบและตัวเลือก SSML ที่ใช้ใน Actions ได้

<speak>

องค์ประกอบรูทของการตอบสนอง SSML

ดูข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบ speak ได้ที่ข้อกำหนด W3

ตัวอย่าง

<speak>
  my SSML content
</speak>
วันที่

<break>

องค์ประกอบว่างเปล่าที่ควบคุมการหยุดชั่วคราวหรือขอบเขตการแยกแยะระหว่างคำอื่นๆ คุณจะใช้ <break> ระหว่างโทเค็นคู่ใดก็ได้หรือไม่ก็ได้ หากไม่มีองค์ประกอบนี้อยู่ระหว่างคำ ระบบจะกำหนดช่วงพักโดยอัตโนมัติตามบริบททางภาษา

ดูข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบ break ได้ที่ข้อกำหนด W3

Attributes

แอตทริบิวต์ คำอธิบาย
time

ตั้งค่าระยะเวลาของช่วงพักตามวินาทีหรือมิลลิวินาที (เช่น "3s" หรือ "250ms")

strength

ตั้งค่าความแรงของการหยุดพักของโพรโซดิกของเอาต์พุตตามพจน์ที่เกี่ยวข้อง ค่าที่ใช้ได้ ได้แก่ "x-sensitive", อ่อน", "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

    ตัวอย่างต่อไปนี้จะพูดเป็น "402 ดอลลาร์และ 1 เซ็นต์" หากละแอตทริบิวต์ภาษา แอตทริบิวต์นั้นจะใช้ตำแหน่งที่ตั้งปัจจุบัน

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

    ดูคำอธิบาย interpret-as='telephone' ในหมายเหตุ W3C SSML 1.0 พูดว่าเป็นค่าแอตทริบิวต์

    ตัวอย่างต่อไปนี้จะพูดเป็น "180002021212" หากปุ่ม "google:style" ไม่ได้ใส่แอตทริบิวต์ แอตทริบิวต์ดังกล่าวเขียนว่า 0 เป็นตัวอักษร O

    คำสั่ง "google:style='zero-as-zero'" ใช้ได้เฉพาะในภาษาภาษาอังกฤษเท่านั้น

          <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} สำหรับปี เดือน และวัน (ของเดือน) ตามลำดับ หากรหัสฟิลด์ปรากฏ 1 ครั้งในปี เดือน หรือวัน จำนวนหลักที่คาดไว้คือ 4, 2 และ 2 ตามลำดับ หากมีรหัสฟิลด์ซ้ำ จํานวนตัวเลขที่คาดไว้คือจํานวนครั้งที่มีการใช้รหัสซ้ำ ฟิลด์ในข้อความวันที่อาจมีการคั่นด้วยเครื่องหมายวรรคตอนและ/หรือการเว้นวรรค

    แอตทริบิวต์ detail จะควบคุมรูปแบบคำพูดของวันที่ สำหรับ detail='1' มีเฉพาะช่องวันและช่องเดือนหรือปี 1 ช่องเท่านั้น อาจต้องระบุทั้งคู่ ตัวเลือกนี้เป็นค่าเริ่มต้นในกรณีที่ระบุน้อยกว่าทั้ง 3 ช่อง รูปแบบคำพูดคือ "{ordinal day} ของ {month} {year}"

    มีการพูดตัวอย่างต่อไปนี้ว่า "วันที่ 19 กันยายน 190"

    <speak>
      <say-as interpret-as="date" format="yyyymmdd" detail="1">
        1960-09-10
      </say-as>
    </speak>
        
    วันที่

    ตัวอย่างต่อไปนี้พูดเป็น "วันสิบกันยายน":

    <speak>
      <say-as interpret-as="date" format="dm">10-9</say-as>
    </speak>
        
    วันที่

    สำหรับ detail='2' ต้องกรอกข้อมูลในช่องวัน เดือน และปี และตัวเลือกนี้เป็นค่าเริ่มต้นเมื่อมีการระบุทั้ง 3 ช่อง รูปแบบที่พูดคือ "{month} {ordinal day}, {year}"

    มีการพูดตัวอย่างต่อไปนี้ว่า "สิบกันยายน สิบเก้าสิบ"

    <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

    ตัวอย่างต่อไปนี้พูดเป็น "12,345" (สำหรับภาษาอังกฤษแบบสหรัฐอเมริกา) หรือ "หนึ่งหมื่นสามร้อยสี่สิบห้า (สำหรับภาษาอังกฤษแบบสหราชอาณาจักร)":

    <speak>
      <say-as interpret-as="cardinal">12345</say-as>
    </speak>
        
    วันที่
  • ordinal

    ตัวอย่างต่อไปนี้จะพูดเป็น "First":

    <speak>
      <say-as interpret-as="ordinal">1</say-as>
    </speak>
        
    วันที่
  • fraction

    ตัวอย่างต่อไปนี้คือ "5 ครึ่ง"

    <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 ฟุต"

    <speak>
      <say-as interpret-as="unit">10 foot</say-as>
    </speak>
        
    วันที่
  • time

    ตัวอย่างต่อไปนี้พูดเป็น "23.00 น."

    <speak>
      <say-as interpret-as="time" format="hms12">2:30pm</say-as>
    </speak>
        
    วันที่

    แอตทริบิวต์ format เป็นลำดับรหัสอักขระของช่องเวลา รหัสอักขระในช่องที่รองรับใน format คือ {h,m, s, Z, 12, 24} สำหรับชั่วโมง นาที (ของชั่วโมง) วินาที (ของนาที) เขตเวลา เวลาแบบ 12 ชั่วโมง และเวลา 24 ชั่วโมงตามลำดับ หากรหัสฟิลด์ปรากฏ 1 ครั้งเป็นชั่วโมง นาที หรือวินาที จำนวนหลักที่คาดไว้คือ 1, 2 และ 2 ตามลำดับ หากมีรหัสฟิลด์ซ้ำ จํานวนตัวเลขที่คาดไว้คือจํานวนครั้งที่มีการใช้รหัสซ้ำ ฟิลด์ในข้อความระบุเวลาอาจมีการคั่นด้วยเครื่องหมายวรรคตอนและ/หรือการเว้นวรรค ถ้าไม่มีการระบุชั่วโมง นาที หรือวินาทีในรูปแบบนี้ หรือไม่มีตัวเลขที่ตรงกัน ระบบจะถือว่าฟิลด์มีค่าเป็น 0 format เริ่มต้นคือ "hms12"

    แอตทริบิวต์ detail จะควบคุมรูปแบบคำพูดของเวลาเป็นแบบ 12 ชั่วโมงหรือเวลา 24 ชั่วโมง รูปแบบที่พูดคือเวลา 24 ชั่วโมงหากละ detail='1' หรือถ้าละเว้น detail และรูปแบบเวลาคือเวลา 24 ชั่วโมง รูปแบบที่พูดคือเวลา 12 ชั่วโมงหากละ detail='2' หรือถ้าละ detail และรูปแบบเวลาคือเวลา 12 ชั่วโมง

ดูข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบ say-as ได้ที่ข้อกำหนด W3

<audio>

รองรับการแทรกไฟล์เสียงที่บันทึกไว้และการแทรกเสียงรูปแบบอื่นๆ ร่วมกับเอาต์พุตเสียงพูดสังเคราะห์

Attributes

แอตทริบิวต์ ต้องระบุ ค่าเริ่มต้น ค่า
src ใช่ ไม่มี URI ที่อ้างถึงแหล่งที่มาของสื่อเสียง โปรโตคอลที่รองรับคือ https
clipBegin ไม่ 0 TimeDesignation ที่เป็นออฟเซ็ตจากจุดเริ่มต้นของแหล่งที่มาของเสียงเพื่อเริ่มเล่น หากค่านี้มากกว่าหรือเท่ากับระยะเวลาจริงของแหล่งที่มาของเสียง แสดงว่าไม่มีการแทรกเสียง
clipEnd ไม่ อนันต์ TimeDesignation ที่เป็นออฟเซ็ตจากจุดเริ่มต้นของแหล่งที่มาเสียงและสิ้นสุดการเล่น หากระยะเวลาจริงของแหล่งที่มาของเสียงน้อยกว่าค่านี้ การเล่นจะสิ้นสุดเมื่อถึงเวลานั้น หาก clipBegin มากกว่าหรือเท่ากับ clipEnd จะไม่มีการแทรกเสียง
speed ไม่ 100% อัตราการเล่นเอาต์พุตอัตราส่วนที่สัมพันธ์กับอัตราการป้อนข้อมูลปกติแสดงเป็นเปอร์เซ็นต์ รูปแบบคือจํานวนจริงบวกแล้วตามด้วย % ช่วงที่รองรับในขณะนี้คือ [50% (ความเร็วต่ำ - ครึ่งหนึ่ง), 200% (เร็ว - ความเร็ว 2 เท่า)] ระบบอาจปรับ (หรือไม่ปรับ) ค่าที่อยู่นอกช่วงให้อยู่ในช่วงดังกล่าว
repeatCount ไม่ 1 หรือ 10 หากมีการตั้งค่า repeatDur ตัวเลขจริงซึ่งระบุจำนวนครั้งที่จะแทรกเสียง (หลังจากตัดเสียง หากมี ภายในวันที่ clipBegin และ/หรือ clipEnd) ไม่รองรับการกล่าวซ้ำๆ เป็นเศษส่วน ดังนั้นค่าจะปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด ศูนย์ไม่ใช่ค่าที่ถูกต้อง ดังนั้น จะถือว่าเป็นการไม่ระบุและมีค่าเริ่มต้นในกรณีดังกล่าว
repeatDur ไม่ อนันต์ TimeDesignation ที่จำกัดระยะเวลาของเสียงที่แทรกหลังจากประมวลผลแหล่งที่มาสำหรับแอตทริบิวต์ clipBegin, clipEnd, repeatCount และ speed (แทนที่จะเป็นระยะเวลาการเล่นปกติ) หากระยะเวลาของเสียงที่ประมวลผลน้อยกว่าค่านี้ การเล่นจะสิ้นสุดเมื่อถึงเวลานั้น
soundLevel ไม่ +0 เดซิเบล ปรับระดับเสียงทีละsoundLevelเดซิเบล ช่วงสูงสุดคือ +/-40 dB แต่ช่วงจริงอาจมีประสิทธิภาพน้อยกว่า และคุณภาพของเอาต์พุตอาจไม่ให้ผลลัพธ์ที่ดีในทุกช่วง

การตั้งค่าเสียงที่รองรับในปัจจุบันมีดังนี้

  • รูปแบบ: MP3 (MPEG v2)
    • 24,000 ตัวอย่างต่อวินาที
    • 24K ~ 96, 000 บิตต่อวินาที อัตราคงที่
  • รูปแบบ: Opus ในรูปแบบ Ogg
    • 24,000 ตัวอย่างต่อวินาที (แถบความถี่กว้างยิ่งยวด)
    • 24K - 96, 000 บิตต่อวินาที อัตราคงที่
  • รูปแบบ (เลิกใช้งานแล้ว): WAV (RIFF)
    • PCM 16 บิต มีลายเซ็น Little Endian
    • 24,000 ตัวอย่างต่อวินาที
  • สำหรับทุกรูปแบบ:
    • แนะนำให้ใช้ช่องสัญญาณเดียว แต่ก็รองรับสเตอริโอได้
    • ระยะเวลาสูงสุด 240 วินาที หากต้องการเล่นเสียงโดยให้มีระยะเวลานานขึ้น ให้ลองใช้การตอบกลับสื่อ
    • จำกัดขนาดไฟล์ไม่เกิน 5 เมกะไบต์
    • URL แหล่งที่มาต้องใช้โปรโตคอล HTTPS
    • UserAgent ของเราเมื่อดึงข้อมูลเสียงคือ "Google-Speech-Actions"

เนื้อหาขององค์ประกอบ <audio> เป็นแบบไม่บังคับและจะใช้หากเล่นไฟล์เสียงไม่ได้หรืออุปกรณ์เอาต์พุตไม่รองรับเสียง เนื้อหาอาจมีองค์ประกอบ <desc> ซึ่งในกรณีนี้จะมีการใช้เนื้อหาข้อความขององค์ประกอบนั้นสำหรับการแสดง โปรดดูข้อมูลเพิ่มเติมที่ส่วน "เสียงที่บันทึกไว้" ในรายการตรวจสอบคำตอบ

URL src ต้องเป็น HTTPS URL ด้วย (Google Cloud Storage สามารถโฮสต์ไฟล์เสียงใน HTTPS URL ได้)

ดูข้อมูลเพิ่มเติมเกี่ยวกับการตอบกลับสื่อได้ที่ส่วนการตอบกลับสื่อในคู่มือการตอบกลับ

ดูข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบ 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 มีตัวเลือก 3 แบบดังนี้

แอตทริบิวต์ คำอธิบาย
name

รหัสสตริงสำหรับเครื่องหมายแต่ละรายการ

ตัวเลือก คำอธิบาย
ญาติ ระบุค่าสัมพัทธ์ (เช่น "low" "medium" "high" เป็นต้น) โดยที่ "medium" คือการเสนอเพลงเริ่มต้น
เซมิโทน เพิ่มหรือลดระดับเสียงสูงต่ำทีละ "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> แต่ไม่จำเป็นต้องตั้งค่าแอตทริบิวต์เสียงพูดแต่ละรายการ

องค์ประกอบนี้รองรับ "ระดับ" ที่ไม่บังคับ ด้วยค่าที่ถูกต้องต่อไปนี้

  • strong
  • moderate
  • none
  • reduced

ดูข้อมูลเพิ่มเติมเกี่ยวกับองค์ประกอบ emphasis ได้ที่ข้อกำหนด W3

ตัวอย่าง

ตัวอย่างต่อไปนี้ใช้องค์ประกอบ <emphasis> เพื่อประกาศ

<emphasis level="moderate">This is an important announcement</emphasis>
วันที่

<par>

คอนเทนเนอร์สื่อแบบขนานที่ช่วยให้คุณเล่นองค์ประกอบสื่อหลายรายการพร้อมกันได้ เนื้อหาที่ได้รับอนุญาตเพียงรายการเดียวคือชุดขององค์ประกอบ <par>, <seq> และ <media> อย่างน้อย 1 รายการ ลําดับขององค์ประกอบ <media> ไม่สําคัญ

เวลาเริ่มต้นโดยนัยสำหรับองค์ประกอบจะเหมือนกับเวลาของคอนเทนเนอร์ <par> เว้นแต่องค์ประกอบย่อยระบุเวลาเริ่มต้นที่แตกต่างกัน หากองค์ประกอบย่อยมีการตั้งค่าออฟเซ็ตสำหรับแอตทริบิวต์ begin หรือ end ออฟเซ็ตขององค์ประกอบจะสัมพันธ์กับเวลาเริ่มต้นของคอนเทนเนอร์ <par> สำหรับองค์ประกอบ <par> ระดับรูท ระบบจะไม่สนใจแอตทริบิวต์ start และเวลาเริ่มต้นคือเมื่อกระบวนการสังเคราะห์เสียงพูด 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> อย่างน้อย 1 รายการ ลำดับขององค์ประกอบสื่อคือลำดับในการแสดง

คุณกำหนดค่าแอตทริบิวต์ 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>

Attributes

แอตทริบิวต์ ต้องระบุ ค่าเริ่มต้น ค่า
xml:id ไม่ ไม่มีค่า ตัวระบุ XML ที่ไม่ซ้ำกันสำหรับองค์ประกอบนี้ ไม่รองรับเอนทิตีที่เข้ารหัส ค่าตัวระบุที่อนุญาตตรงกับนิพจน์ทั่วไป "([-_#]|\p{L}|\p{D})+" โปรดดูข้อมูลเพิ่มเติมที่ XML-ID
เริ่ม ไม่ 0 เวลาเริ่มต้นสำหรับคอนเทนเนอร์สื่อนี้ ไม่สนใจหากนี่คือองค์ประกอบคอนเทนเนอร์สื่อระดับรูท (ปฏิบัติเหมือนกับค่าเริ่มต้น "0") ดูที่ส่วนข้อกําหนดเวลาด้านล่างสําหรับค่าสตริงที่ถูกต้อง
สิ้นสุด ไม่ ไม่มีค่า ข้อมูลจำเพาะสำหรับเวลาสิ้นสุดของคอนเทนเนอร์สื่อนี้ ดูที่ส่วนข้อกําหนดเวลาด้านล่างสําหรับค่าสตริงที่ถูกต้อง
repeatCount ไม่ 1 จํานวนจริงที่ระบุจํานวนครั้งที่จะแทรกสื่อ ไม่รองรับการกล่าวซ้ำๆ เป็นเศษส่วน ดังนั้นค่าจะปัดเศษเป็นจำนวนเต็มที่ใกล้เคียงที่สุด ศูนย์ไม่ใช่ค่าที่ถูกต้อง ดังนั้น จะถือว่าเป็นการไม่ระบุและมีค่าเริ่มต้นในกรณีดังกล่าว
repeatDur ไม่ ไม่มีค่า TimeDesignation ที่เป็นขีดจำกัดระยะเวลาของสื่อที่แทรก หากระยะเวลาของสื่อน้อยกว่าค่านี้ การเล่นจะสิ้นสุดเมื่อถึงเวลานั้น
soundLevel ไม่ +0 เดซิเบล ปรับระดับเสียงทีละ soundLevel เดซิเบล ช่วงสูงสุดคือ +/-40 dB แต่ช่วงจริงอาจมีประสิทธิภาพน้อยกว่า และคุณภาพของเอาต์พุตอาจไม่ให้ผลลัพธ์ที่ดีในทุกช่วง
fadeInDur ไม่ 0 วิ TimeDesignation ที่สื่อจะค่อยๆ ดังขึ้นจากแบบไม่มีเสียงไปยัง soundLevel ที่เลือกไว้ หากระยะเวลาของสื่อน้อยกว่าค่านี้ การค่อยๆ ดังจะหยุดเมื่อเล่นจบ และระดับเสียงจะไม่ถึงระดับเสียงที่ระบุ
fadeOutDur ไม่ 0 วิ TimeDesignation ที่สื่อจะค่อยๆ หายไปจาก soundLevel ที่ระบุหรือไม่ก็ได้ จนกว่าจะปิดเสียง หากระยะเวลาของสื่อน้อยกว่าค่านี้ ระบบจะตั้งระดับเสียงให้ต่ำลงเพื่อให้มั่นใจว่าเสียงจะเล่นจนถึงช่วงที่ไม่มีเสียงเมื่อเล่นจบ

ข้อมูลจำเพาะด้านเวลา

ข้อมูลจำเพาะด้านเวลาที่ใช้สำหรับค่าของแอตทริบิวต์ "begin" และ "end" ขององค์ประกอบ <media> และคอนเทนเนอร์สื่อ (องค์ประกอบ <par> และ <seq>) เป็นค่าออฟเซ็ต (เช่น +2.5s) หรือค่า Syncbase (เช่น foo_id.end-250ms)

  • ค่าออฟเซ็ต - ค่าออฟเซ็ตเวลาคือค่า SMIL Timecount ที่อนุญาตค่าที่ตรงกับนิพจน์ทั่วไป "\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    สตริงหลักแรกคือส่วนของเลขฐานสิบและสตริงหลักที่สองคือเศษส่วนทศนิยม เครื่องหมายเริ่มต้น (เช่น "(+|-)?") คือ "+" ค่าของหน่วยจะสอดคล้องกับชั่วโมง นาที วินาที และมิลลิวินาทีตามลำดับ ค่าเริ่มต้นสำหรับหน่วยคือ "s" (วินาที)

  • ค่า Syncbase - ค่า Syncbase คือค่า Syncbase-ของ SMIL ที่อนุญาตค่าที่ตรงกับนิพจน์ทั่วไป ดังนี้ "([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"

    ระบบจะตีความตัวเลขและหน่วยในลักษณะเดียวกันเป็นค่าชดเชย

เครื่องมือจำลอง TTS

คอนโซลการดําเนินการมีเครื่องจำลอง TTS ที่คุณใช้ทดสอบ SSML ได้ กับองค์ประกอบข้างต้น คุณสามารถค้นหาเครื่องมือจำลอง TTS ได้ในคอนโซล ภายใต้เครื่องจำลอง > เสียง พิมพ์ข้อความและ SSML ในเครื่องมือจำลองแล้วคลิก อัปเดตและฟังเพื่อฟังเอาต์พุต TTS

คุณสามารถคลิกปุ่มดาวน์โหลดเพื่อบันทึกไฟล์ .mp3 ของ TTS ได้ด้วย เอาต์พุต