Struktur dan peristiwa dokumen SSML
Speech Synthesis Markup Language (SSML) dengan teks input menentukan struktur, konten, dan karakteristik teks ke output ucapan lainnya. Misalnya, Anda dapat menggunakan SSML untuk menentukan paragraf, kalimat, jeda atau jeda, atau keheningan. Anda dapat membungkus teks dengan tag peristiwa seperti bookmark atau viseme yang dapat diproses nanti oleh aplikasi Anda.
Lihat bagian di bawah ini untuk detail tentang cara menyusun elemen dalam dokumen SSML.
Catatan
Selain suara neural Ucapan Azure AI (non HD), Anda juga dapat menggunakan suara definisi tinggi Azure AI Speech (HD) dan suara neural Azure OpenAI (HD dan non HD). Suara HD memberikan kualitas yang lebih tinggi untuk skenario yang lebih serbaguna.
Beberapa suara tidak mendukung semua tag Speech Synthesis Markup Language (SSML ). Ini termasuk teks neural ke suara HD ucapan, suara pribadi, dan suara yang disematkan.
- Untuk suara definisi tinggi Azure AI Speech (HD), periksa dukungan SSML di sini.
- Untuk suara pribadi, Anda dapat menemukan dukungan SSML di sini.
- Untuk suara yang disematkan, periksa dukungan SSML di sini.
Struktur dokumen
Implementasi layanan Azure Cognitive Service untuk Ucapan SSML didasarkan pada Speech Synthesis Markup Language Version 1.0 W3C. Elemen yang didukung oleh Ucapan dapat berbeda dari standar W3C.
Setiap dokumen SSML dibuat dengan elemen atau tag SSML. Elemen-elemen ini digunakan untuk menyesuaikan suara, gaya, pitch, prosody, volume, dan banyak lagi.
Berikut adalah subset struktur dasar dan sintaks dokumen SSML:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="string">
<mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>
<voice name="string" effect="string">
<audio src="string"></audio>
<bookmark mark="string"/>
<break strength="string" time="string" />
<emphasis level="value"></emphasis>
<lang xml:lang="string"></lang>
<lexicon uri="string"/>
<math xmlns="http://www.w3.org/1998/Math/MathML"></math>
<mstts:audioduration value="string"/>
<mstts:ttsembedding speakerProfileId="string"></mstts:ttsembedding>
<mstts:express-as style="string" styledegree="value" role="string"></mstts:express-as>
<mstts:silence type="string" value="string"/>
<mstts:viseme type="string"/>
<p></p>
<phoneme alphabet="string" ph="string"></phoneme>
<prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>
<s></s>
<say-as interpret-as="string" format="string" detail="string"></say-as>
<sub alias="string"></sub>
</voice>
</speak>
Beberapa contoh konten yang diizinkan di setiap elemen dijelaskan dalam daftar berikut:
audio
: Isiaudio
elemen dapat berisi teks biasa atau markup SSML yang diucapkan jika file audio tidak tersedia atau tidak dapat diputar. Elemenaudio
dapat berisi teks dan elemen berikut:audio
,break
,p
,s
,phoneme
,prosody
,say-as
, dansub
.bookmark
: Elemen ini tidak boleh berisi teks atau elemen lainnya.break
: Elemen ini tidak boleh berisi teks atau elemen lainnya.emphasis
: Elemen ini dapat berisi teks dan elemen berikut:audio
, ,break
,emphasis
,lang
phoneme
,prosody
,say-as
, , dansub
.lang
: Elemen ini dapat berisi semua elemen lain kecualimstts:backgroundaudio
, ,voice
danspeak
.lexicon
: Elemen ini tidak boleh berisi teks atau elemen lainnya.math
: Elemen ini hanya dapat berisi teks dan elemen MathML.mstts:audioduration
: Elemen ini tidak boleh berisi teks atau elemen lainnya.mstts:backgroundaudio
: Elemen ini tidak boleh berisi teks atau elemen lainnya.mstts:embedding
: Elemen ini dapat berisi teks dan elemen berikut:audio
, ,break
,emphasis
,lang
phoneme
,prosody
,say-as
, , dansub
.mstts:express-as
: Elemen ini dapat berisi teks dan elemen berikut:audio
, ,break
,emphasis
,lang
phoneme
,prosody
,say-as
, , dansub
.mstts:silence
: Elemen ini tidak boleh berisi teks atau elemen lainnya.mstts:viseme
: Elemen ini tidak boleh berisi teks atau elemen lainnya.p
: Elemen ini dapat berisi teks dan elemen berikut:audio
, ,break
,phoneme
,prosody
say-as
,sub
,mstts:express-as
, , dans
.phoneme
: Elemen ini hanya dapat berisi teks dan tidak ada elemen lain.prosody
: Elemen ini dapat berisi teks dan elemen berikut:audio
, ,break
,p
,phoneme
prosody
,say-as
,sub
, , dans
.s
: Elemen ini dapat berisi teks dan elemen berikut:audio
, ,break
,phoneme
,prosody
say-as
,mstts:express-as
, dansub
.say-as
: Elemen ini hanya dapat berisi teks dan tidak ada elemen lain.sub
: Elemen ini hanya dapat berisi teks dan tidak ada elemen lain.speak
: Elemen akar dari dokumen SSML. Elemen ini dapat berisi elemen berikut:mstts:backgroundaudio
danvoice
.voice
: Elemen ini dapat berisi semua elemen lain kecualimstts:backgroundaudio
danspeak
.
Layanan Ucapan secara otomatis menangani tanda baca sebagaimana mestinya, seperti menjeda setelah periode tertentu, atau menggunakan intonasi yang benar saat kalimat berakhir dengan tanda tanya.
Karakter khusus
Untuk menggunakan karakter &
, <
, dan >
dalam nilai atau teks elemen SSML, Anda harus menggunakan format entitas. Secara khusus Anda harus menggunakan &
sebagai ganti &
, gunakan <
sebagai ganti <
, dan digunakan >
sebagai pengganti >
. Jika tidak, SSML tidak diurai dengan benar.
Misalnya, tentukan green & yellow
alih-alih green & yellow
. SSML berikut diurai seperti yang diharapkan:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
My favorite colors are green & yellow.
</voice>
</speak>
Karakter khusus seperti tanda kutip, apostrof, dan tanda kurung, harus diloloskan. Untuk informasi selengkapnya, lihat Extensible Markup Language (XML) 1.0: Lampiran D.
Tanda kutip ganda atau tunggal harus mengapit nilai atribut. Misalnya, <prosody volume="90">
dan <prosody volume='90'>
merupakan elemen yang terbentuk dengan baik dan valid, tetapi <prosody volume=90>
tidak dikenali.
Berbicara elemen akar
Elemen berisi speak
informasi seperti versi, bahasa, dan definisi kosakata markup. Elemen speak
ini adalah elemen akar yang diperlukan untuk semua dokumen SSML. Anda harus menentukan bahasa default dalam speak
elemen, apakah bahasa disesuaikan di tempat lain seperti dalam lang
elemen atau tidak.
Berikut sintaks untuk speak
elemen :
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
version |
Menunjukkan versi spesifikasi SSML yang digunakan untuk menginterpretasikan markup dokumen. Versi saat ini adalah "1.0". | Wajib |
xml:lang |
Bahasa dokumen akar. Nilai dapat berisi kode bahasa seperti en (Bahasa Inggris), atau lokal seperti en-US (Inggris - Amerika Serikat). |
Wajib |
xmlns |
URI ke dokumen yang menentukan kosakata markup (jenis elemen dan nama atribut) dari dokumen SSML. URI saat ini adalah "http://www.w3.org/2001/10/synthesis". | Wajib |
Elemen speak
harus berisi setidaknya satu elemen suara.
contoh berbicara
Nilai yang didukung untuk atribut speak
elemen dijelaskan sebelumnya.
Contoh suara tunggal
Contoh ini menggunakan en-US-AvaNeural
suara. Untuk contoh lainnya, lihat contoh suara.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
This is the text that is spoken.
</voice>
</speak>
Menambahkan jeda
break
Gunakan elemen untuk mengambil alih perilaku default jeda atau jeda antar kata. Jika tidak, layanan Ucapan secara otomatis menyisipkan jeda.
Penggunaan break
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
strength |
Durasi relatif jeda dengan menggunakan salah satu nilai berikut:
|
Opsional |
time |
Durasi absolut jeda dalam hitungan detik (seperti 2s ) atau milidetik (seperti 500ms ). Nilai yang valid berkisar antara 0 hingga 20000 milidetik. Jika Anda menetapkan nilai yang lebih besar dari maksimum yang didukung, layanan akan menggunakan 20000ms . time Jika atribut diatur, strength atribut diabaikan. |
Opsional |
Berikut adalah detail selengkapnya tentang strength
atribut .
Strength | Durasi relatif |
---|---|
X-weak | 250 md |
Weak | 500 md |
Medium | 750 md |
Kuat | 1.000 ms |
X-strong | 1.250 ms |
Contoh pemisah
Nilai yang didukung untuk atribut break
elemen dijelaskan sebelumnya. Tiga cara berikut menambahkan 750 mdtk jeda.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
Welcome <break /> to text to speech.
Welcome <break strength="medium" /> to text to speech.
Welcome <break time="750ms" /> to text to speech.
</voice>
</speak>
Menambahkan keheningan
Gunakan elemen mstts:silence
untuk menyisipkan jeda sebelum atau setelah teks, atau di antara dua kalimat yang berdekatan.
Salah satu perbedaan antara mstts:silence
dan break
adalah bahwa break
elemen dapat disisipkan di mana saja dalam teks. Keheningan hanya berfungsi di awal atau akhir teks input atau di batas dua kalimat yang berdekatan.
Pengaturan keheningan diterapkan ke semua teks input dalam elemen penutupnya voice
. Untuk mengatur ulang atau mengubah pengaturan keheningan lagi, Anda harus menggunakan elemen baru voice
dengan suara yang sama atau suara yang berbeda.
Penggunaan mstts:silence
atribut elemen dijelaskan dalam tabel berikut.
contoh keheningan mstts
Nilai yang didukung untuk atribut mstts:silence
elemen dijelaskan sebelumnya.
Dalam contoh ini, mstts:silence
digunakan untuk menambahkan keheningan sebesar 200 ms di antara dua kalimat.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:silence type="Sentenceboundary" value="200ms"/>
If we're home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>
Dalam contoh ini, mstts:silence
digunakan untuk menambahkan 50 ms keheningan pada koma, 100 ms keheningan di titik koma, dan 150 ms keheningan pada koma enumerasi.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="zh-CN">
<voice name="zh-CN-YunxiNeural">
<mstts:silence type="comma-exact" value="50ms"/><mstts:silence type="semicolon-exact" value="100ms"/><mstts:silence type="enumerationcomma-exact" value="150ms"/>你好呀,云希、晓晓;你好呀。
</voice>
</speak>
Menentukan paragraf dan kalimat
p
dan s
elemen digunakan untuk menunjukkan paragraf dan kalimat, secara berurutan. Dengan tidak adanya elemen-elemen ini, layanan Ucapan secara otomatis menentukan struktur dokumen SSML.
Contoh paragraf dan kalimat
Contoh berikut mendefinisikan dua paragraf yang masing-masing berisi kalimat. Di paragraf kedua, layanan Ucapan secara otomatis menentukan struktur kalimat, karena tidak ditentukan dalam dokumen SSML.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<p>
<s>Introducing the sentence element.</s>
<s>Used to mark individual sentences.</s>
</p>
<p>
Another simple paragraph.
Sentence structure in this paragraph is not explicitly marked.
</p>
</voice>
</speak>
Elemen marka buku
Anda dapat menggunakan bookmark
elemen di SSML untuk mereferensikan lokasi tertentu dalam urutan teks atau tag. Kemudian Anda menggunakan Speech SDK dan berlangganan BookmarkReached
acara untuk mendapatkan offset dari setiap penanda di aliran audio. Elemen bookmark
tidak diucapkan. Untuk informasi selengkapnya, lihat Berlangganan peristiwa synthesizer.
Penggunaan bookmark
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
mark |
Teks bookmark referensi elemen . |
Wajib |
Contoh marka buku
Nilai yang didukung untuk atribut bookmark
elemen dijelaskan sebelumnya.
Sebagai contoh, Anda mungkin ingin mengetahui offset waktu setiap kata bunga sebagai berikut:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
</voice>
</speak>
Elemen Viseme
Viseme adalah deskripsi visual dari sebuah fonem dalam bahasa lisan. Ini menentukan posisi wajah dan mulut ketika seseorang berbicara. Anda dapat menggunakan elemen mstts:viseme
di SSML untuk meminta output viseme. Untuk informasi selengkapnya, lihat Mendapatkan posisi wajah dengan viseme.
Pengaturan viseme diterapkan ke semua teks input dalam elemen penutupnya voice
. Untuk mengatur ulang atau mengubah pengaturan viseme lagi, Anda harus menggunakan elemen baru voice
dengan suara yang sama atau suara yang berbeda.
Penggunaan viseme
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
type |
Jenis output viseme.
|
Diperlukan |
Catatan
Saat ini, redlips_front
hanya mendukung suara neural di lokal en-US
, dan FacialExpression
mendukung suara neural di lokal en-US
dan zh-CN
.
Contoh viseme
Nilai yang didukung untuk atribut viseme
elemen dijelaskan sebelumnya.
Cuplikan SSML ini menggambarkan cara meminta bentuk campuran dengan ucapan Anda yang disintesis.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<mstts:viseme type="FacialExpression"/>
Rainbow has seven colors: Red, orange, yellow, green, blue, indigo, and violet.
</voice>
</speak>