เมื่อส่งคืนการตอบกลับไปยัง 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 อย่างถูกต้อง
แม้ว่าการตอบกลับ 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&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 ก็ได้เช่นกัน