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.

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: Isi audio elemen dapat berisi teks biasa atau markup SSML yang diucapkan jika file audio tidak tersedia atau tidak dapat diputar. Elemen audio dapat berisi teks dan elemen berikut: audio, break, p, s, phoneme, prosody, say-as, dan sub.
  • 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, langphoneme, prosody, say-as, , dan sub.
  • lang: Elemen ini dapat berisi semua elemen lain kecuali mstts:backgroundaudio, , voicedan speak.
  • 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, langphoneme, prosody, say-as, , dan sub.
  • mstts:express-as: Elemen ini dapat berisi teks dan elemen berikut: audio, , break, emphasis, langphoneme, prosody, say-as, , dan sub.
  • 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, prosodysay-as, sub, mstts:express-as, , dan s.
  • phoneme: Elemen ini hanya dapat berisi teks dan tidak ada elemen lain.
  • prosody: Elemen ini dapat berisi teks dan elemen berikut: audio, , break, p, phonemeprosody, say-as, sub, , dan s.
  • s: Elemen ini dapat berisi teks dan elemen berikut: audio, , break, phoneme, prosodysay-as, mstts:express-as, dan sub.
  • 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 dan voice.
  • voice: Elemen ini dapat berisi semua elemen lain kecuali mstts:backgroundaudio dan speak.

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 &amp; sebagai ganti &, gunakan &lt; sebagai ganti <, dan digunakan &gt; sebagai pengganti >. Jika tidak, SSML tidak diurai dengan benar.

Misalnya, tentukan green &amp; 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 &amp; 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". Diperlukan
xml:lang Bahasa dokumen akar. Nilai dapat berisi kode bahasa seperti en (Bahasa Inggris), atau lokal seperti en-US (Inggris - Amerika Serikat). Diperlukan
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". Diperlukan

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-AvaNeuralsuara. 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:
  • x-lemah
  • lemah
  • sedang (default)
  • kuat
  • x-kuat
Opsional
time Durasi absolut jeda dalam hitungan detik (seperti 2s) atau milidetik (seperti 500ms). Nilai yang valid berkisar antara 0 hingga 5000 milidetik. Jika Anda menetapkan nilai yang lebih besar dari maksimum yang didukung, layanan akan menggunakan 5000ms. 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.

Atribut Deskripsi Diperlukan atau opsional
type Menentukan tempat dan cara menambahkan keheningan. Jenis keheningan berikut didukung:
  • Leading – Keheningan ekstra di awal teks. Nilai yang Anda tetapkan ditambahkan ke keheningan alami sebelum awal teks.
  • Leading-exact – Diam di awal teks. Nilainya adalah panjang keheningan absolut.
  • Tailing – Keheningan ekstra di akhir teks. Nilai yang Anda tetapkan ditambahkan ke keheningan alami setelah kata terakhir.
  • Tailing-exact – Diam di akhir teks. Nilainya adalah panjang keheningan absolut.
  • Sentenceboundary – Keheningan ekstra antara kalimat yang berdekatan. Panjang keheningan aktual untuk jenis ini mencakup keheningan alami setelah kata terakhir dalam kalimat sebelumnya, nilai yang Anda tetapkan untuk jenis ini, dan keheningan alami sebelum kata awal dalam kalimat berikutnya.
  • Sentenceboundary-exact – Keheningan antara kalimat yang berdekatan. Nilainya adalah panjang keheningan absolut.
  • Comma-exact – Keheningan pada koma dalam format lebar setengah atau lebar penuh. Nilainya adalah panjang keheningan absolut.
  • Semicolon-exact – Diam di titik koma dalam format lebar setengah atau lebar penuh. Nilainya adalah panjang keheningan absolut.
  • Enumerationcomma-exact – Diam pada koma enumerasi dalam format lebar penuh. Nilainya adalah panjang keheningan absolut.

Jenis keheningan -exact absolut (dengan akhiran) menggantikan keheningan terkemuka atau berikutnya yang alami. Jenis keheningan absolut lebih diutamakan daripada jenis non-absolut yang sesuai. Misalnya, jika Anda mengatur kedua Leading jenis dan Leading-exact , jenis berlaku Leading-exact . Peristiwa WordBoundary lebih diutamakan daripada pengaturan keheningan terkait tanda baca termasuk Comma-exact, , Semicolon-exactatau Enumerationcomma-exact. Saat Anda menggunakan pengaturan keheningan WordBoundary terkait peristiwa dan tanda baca, pengaturan keheningan terkait tanda baca tidak berlaku.
Diperlukan
Value Durasi jeda dalam detik (seperti 2s) atau milidetik (seperti 500ms). Nilai yang valid berkisar antara 0 hingga 5000 milidetik. Jika Anda menetapkan nilai yang lebih besar dari maksimum yang didukung, layanan akan menggunakan 5000ms. Diperlukan

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 selemen 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 . Diperlukan

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.
  • redlips_front – sinkronisasi bibir dengan ID viseme dan output offset audio
  • FacialExpression – output bentuk campuran
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>

Langkah berikutnya