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