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 แทนที่อินสแตนซ์ของ & ด้วย &amp; เพื่อให้แน่ใจว่ามีการอ้างอิง URL อย่างถูกต้อง

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

<speak>

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

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

ตัวอย่าง

<speak>
  my SSML content
</speak>

<break>

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

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

Attributes

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

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

strength

ตั้งค่าความแรงของตัวแบ่ง Prosodic ของเอาต์พุตตามพจน์สัมพัทธ์ ค่าที่ใช้ได้ ได้แก่ "x- อัปเดต, อ่อน", "ปานกลาง", "แรง" และ "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' ในหมายเหตุ WGC SSML 1.0 พูดค่าแอตทริบิวต์เกี่ยวกับ WG

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

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

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

    <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}"

    ตัวอย่างต่อไปนี้จะใช้คำว่า "10 กันยายน 1960"

    <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" (สำหรับภาษาอังกฤษแบบสหรัฐอเมริกา) หรือ "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

    ตัวอย่างต่อไปนี้บอกว่า "ห้าครึ่ง"

    <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

    ตัวอย่างต่อไปนี้คือ "230.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, 2 และ 2 ตามลำดับ หากรหัสฟิลด์เป็นรหัสซ้ำ จำนวนตัวเลขที่คาดไว้คือจำนวนครั้งที่รหัสซ้ำกัน ช่องในข้อความเวลาอาจคั่นด้วยเครื่องหมายวรรคตอนและ/หรือการเว้นวรรค หากไม่ได้ระบุชั่วโมง นาที หรือวินาทีในรูปแบบหรือไม่มีตัวเลขที่ตรงกัน ระบบจะถือว่าเป็นค่า 0 ค่าเริ่มต้นคือ "hms12"format

    แอตทริบิวต์ 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% (เร็ว - ความเร็วคู่)] ค่าที่อยู่นอกช่วงดังกล่าวอาจได้รับการปรับ (หรืออาจไม่) ให้อยู่ในช่วงดังกล่าว
repeatCount ไม่ 1 หรือ 10 หากตั้งค่า repeatDur ไว้ ตัวเลขจริง ระบุจำนวนครั้งที่จะแทรกเสียง (หลังจากตัดคลิป (หากมี) ภายในวันที่ clipBegin และ/หรือ clipEnd) ระบบไม่รองรับการกล่าวซ้ำๆ แบบเศษส่วน ดังนั้นค่าจะปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด 0 ไม่ใช่ค่าที่ถูกต้อง ดังนั้นจึงถือเป็นค่าไม่ได้ระบุและมีค่าเริ่มต้นเป็นกรณีนี้
repeatDur ไม่ อนันต์ TimeDesignation ที่จำกัดระยะเวลาของเสียงที่แทรกหลังจากประมวลผลต้นฉบับสำหรับแอตทริบิวต์ clipBegin, clipEnd, repeatCount และ speed (แทนระยะเวลาการเล่นปกติ) หากระยะเวลาของเสียงที่ประมวลผลน้อยกว่าค่านี้ การเล่นจะสิ้นสุดเมื่อถึงเวลานั้น
soundLevel ไม่ +0dB ปรับระดับเสียงเป็นsoundLevelเดซิเบล ช่วงสูงสุดคือ +/-40 dB แต่ช่วงจริงอาจมีประสิทธิภาพน้อยกว่า และคุณภาพเอาต์พุตอาจไม่ให้ผลลัพธ์ที่ดีทั่วทั้งช่วง

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

  • รูปแบบ: MP3 (MPEG v2)
    • 24,000 ตัวอย่างต่อวินาที
    • 24K ~ 96K บิตต่อวินาที อัตราคงที่
  • รูปแบบ: 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 ต้องเป็น URL แบบ HTTPS ด้วย (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 ที่เปลี่ยน Prosody (ได้แก่ <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

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

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

เวลาเริ่มต้นโดยนัยสำหรับองค์ประกอบจะเหมือนกับเวลาเริ่มต้นของคอนเทนเนอร์ <par> เว้นแต่ว่าองค์ประกอบย่อยจะระบุเวลาเริ่มต้นแตกต่างกัน หากองค์ประกอบย่อยมีการตั้งค่าออฟเซ็ตสำหรับแอตทริบิวต์ begin หรือ end ออฟเซ็ตขององค์ประกอบจะสัมพันธ์กับเวลาเริ่มต้นของคอนเทนเนอร์ <par> สำหรับองค์ประกอบรูท <par> ระบบจะไม่สนใจแอตทริบิวต์เริ่มต้น และเวลาเริ่มต้นคือเมื่อกระบวนการสังเคราะห์เสียง 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 ตัวเลขจริงที่ระบุจำนวนครั้งที่จะแทรกสื่อ ระบบไม่รองรับการกล่าวซ้ำๆ แบบเศษส่วน จึงจะปัดเศษค่าเป็นจำนวนเต็มที่ใกล้ที่สุด 0 ไม่ใช่ค่าที่ถูกต้อง ดังนั้นจึงถือเป็นค่าไม่ได้ระบุและมีค่าเริ่มต้นเป็นกรณีนี้
repeatDur ไม่ ไม่มีค่า TimeDesignation ที่จำกัดระยะเวลาของสื่อที่แทรก หากระยะเวลาของสื่อน้อยกว่าค่านี้ การเล่นจะจบลง ณ ขณะนั้น
soundLevel ไม่ +0dB ปรับระดับเสียงขึ้นทีละ soundLevel เดซิเบล ช่วงสูงสุดคือ +/-40 dB แต่ช่วงจริงอาจมีประสิทธิภาพน้อยกว่า และคุณภาพเอาต์พุตอาจไม่ให้ผลลัพธ์ที่ดีทั่วทั้งช่วง
fadeInDur ไม่ 0 วิ TimeDesignation ที่สื่อจะค่อยๆ ปรากฏขึ้นจากปิดเสียงเป็น soundLevel ที่ไม่บังคับ หากระยะเวลาของสื่อน้อยกว่าค่านี้ เสียงที่เบาลงจะหยุดลงเมื่อจบการเล่น และระดับเสียงจะไม่ถึงระดับเสียงที่ระบุไว้
fadeOutDur ไม่ 0 วิ TimeDesignation ซึ่งสื่อจะจางลงจาก soundLevel ที่ระบุ (ไม่บังคับ) จนกว่าจะปิดเสียง หากระยะเวลาของสื่อน้อยกว่าค่านี้ ระบบจะตั้งค่าระดับเสียงให้ต่ำลงเพื่อให้แน่ใจว่าไม่มีเสียงเมื่อสิ้นสุดการเล่น

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

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

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

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

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

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

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

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

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