Pengucapan dengan SSML
Anda dapat menggunakan Speech Synthesis Markup Language (SSML) dengan teks ke ucapan untuk menentukan bagaimana ucapan diucapkan. Misalnya, Anda dapat menggunakan SSML dengan fonem dan leksikon kustom untuk meningkatkan pengucapan. Anda juga dapat menggunakan SSML untuk menentukan bagaimana kata atau ekspresi matematika diucapkan.
Lihat bagian berikut untuk detail tentang cara menggunakan elemen SSML untuk meningkatkan pengucapan. Untuk informasi selengkapnya tentang sintaks SSML, lihat Struktur dan peristiwa dokumen SSML.
elemen phoneme
Elemen phoneme
digunakan untuk pengucapan fonetik dalam dokumen SSML. Selalu berikan ucapan yang dapat dibaca manusia sebagai cadangan.
Alfabet fonetik terdiri dari ponsel, yang terdiri dari huruf, angka, atau karakter, kadang-kadang dalam kombinasi. Setiap ponsel menggambarkan suara ucapan yang unik. Alfabet fonetik berbeda dengan alfabet Latin, di mana huruf apa pun mungkin mewakili beberapa suara lisan. Pertimbangkan pengucapan yang berbeda en-US
dari huruf "c" dalam kata "permen" dan "berhenti" atau pengucapan yang berbeda dari kombinasi huruf "th" dalam kata "hal" dan "itu."
Catatan
Untuk daftar lokal yang mendukung fonem, lihat catatan kaki dalam tabel dukungan bahasa.
Penggunaan phoneme
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
alphabet |
Alfabet fonetik yang digunakan saat Anda mensintesis pengucapan string dalam ph atribut. String yang menentukan alfabet harus ditentukan dalam huruf kecil. Berikut adalah kemungkinan alfabet yang bisa Anda tentukan:
Alfabet tersebut hanya berlaku untuk phoneme di elemen. |
Opsional |
ph |
Untai yang berisi ponsel yang menentukan pengucapan kata dalam phoneme elemen. Jika string yang ditentukan berisi ponsel yang tidak dikenali, teks ke ucapan menolak seluruh dokumen SSML dan tidak menghasilkan output ucapan yang ditentukan dalam dokumen.Untuk ipa , untuk menekankan satu suku kata dengan menempatkan simbol stres sebelum suku kata ini, Anda perlu menandai semua suku kata. Atau, suku kata sebelum simbol stres ini stres. Untuk sapi , jika Anda ingin menekankan satu suku kata, Anda perlu menempatkan simbol stres setelah suku kata ini, apakah semua suku kata ditandai atau tidak. |
Diperlukan |
contoh fonem
Nilai yang didukung untuk atribut phoneme
elemen dijelaskan sebelumnya. Dalam dua contoh pertama, nilai ph="tə.ˈmeɪ.toʊ"
atau ph="təmeɪˈtoʊ"
ditentukan untuk menekankan suku kata meɪ
.
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="ipa" ph="təmeɪˈtoʊ"> tomato </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
</voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaNeural">
<phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
</voice>
</speak>
Leksikon kustom
Anda dapat menentukan bagaimana entitas tunggal (seperti perusahaan, istilah medis, atau emoji) dibaca di SSML dengan menggunakan fonem dan sub elemen. Untuk menentukan bagaimana beberapa entitas dibaca, buat file leksikon kustom terstruktur XML. Kemudian Anda mengunggah file XML leksikon kustom dan mereferensikannya dengan elemen SSML lexicon
.
Catatan
Untuk daftar lokal yang mendukung leksikon kustom, lihat catatan kaki dalam tabel dukungan bahasa.
Elemen lexicon
tidak didukung oleh API Long Audio. Untuk teks bentuk panjang ke ucapan, gunakan API sintesis batch (Pratinjau) sebagai gantinya.
Penggunaan lexicon
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
uri |
URI file XML leksikon kustom yang dapat diakses publik dengan .xml ekstensi file atau .pls . Menggunakan Azure Blob Storage disarankan tetapi tidak diperlukan. Untuk informasi selengkapnya tentang file leksikon kustom, lihatPronunciation Lexicon Specification (PLS) Versi 1.0. |
Diperlukan |
Contoh leksikon kustom
Nilai yang didukung untuk atribut lexicon
elemen dijelaskan sebelumnya.
Setelah menerbitkan leksikon kustom, Anda dapat mereferensikannya dari SSML Anda. Contoh SSML berikut mereferensikan leksikon kustom yang diunggah ke https://www.example.com/customlexicon.xml
. Kami mendukung URL leksikon dari Azure Blob Storage, Advanced Media Services (AMS) Storage, dan GitHub. Namun, perhatikan bahwa URL publik lainnya mungkin tidak kompatibel.
<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">
<lexicon uri="https://www.example.com/customlexicon.xml"/>
BTW, we will be there probably at 8:00 tomorrow morning.
Could you help leave a message to Robert Benigni for me?
</voice>
</speak>
File leksikon kustom
Untuk menentukan bagaimana beberapa entitas dibaca, Anda dapat menentukannya dalam file XML leksikon kustom dengan .xml
ekstensi file atau .pls
.
Catatan
File leksikon kustom adalah dokumen XML yang valid, tetapi tidak dapat digunakan sebagai dokumen SSML.
Berikut adalah beberapa batasan file leksikon kustom:
- Ukuran file: Ukuran file leksikon kustom dibatasi hingga maksimum 100 KB. Jika ukuran file melebihi batas 100 KB, permintaan sintesis gagal. Anda dapat membagi leksikon Anda menjadi beberapa leksikon dan menyertakannya dalam SSML jika ukuran file melebihi 100 KB.
- Refresh cache Lexicon: Leksikon kustom di-cache dengan URI sebagai kunci pada teks ke ucapan saat pertama kali dimuat. Leksikon dengan URI yang sama tidak dimuat ulang dalam waktu 15 menit, sehingga perubahan leksikon kustom perlu menunggu 15 menit paling lama untuk diterapkan.
Elemen dan atribut yang didukung dari file XML leksikon kustom dijelaskan dalam Spesifikasi Leksikon Pengucapan (PLS) Versi 1.0. Berikut adalah beberapa contoh elemen dan atribut yang didukung:
lexicon
Elemen ini mengandung setidaknya satulexeme
elemen. Leksikon berisi atributxml:lang
penting untuk menunjukkan lokal mana yang harus diterapkan. Satu leksikon kustom terbatas pada satu lokal berdasarkan desain, jadi jika Anda menerapkannya untuk lokal yang berbeda, itu tidak berfungsi. Elemen inilexicon
juga memilikialphabet
atribut untuk menunjukkan alfabet yang digunakan dalam leksikon. Nilai yang mungkin adalahipa
danx-microsoft-sapi
.- Setiap
lexeme
elemen mengandung setidaknya satugrapheme
elemen dan satu atau lebihgrapheme
,alias
, danphoneme
elemen. Elemenlexeme
bersifat sensitif terhadap huruf besar dan kecil dalam leksikon kustom. Misalnya, jika Anda hanya menyediakan fonem untuklexeme
"Halo", itu tidak berfungsi untuklexeme
"halo". - Elemen
grapheme
berisi teks yang menjelaskan ortografi. alias
Elemen digunakan untuk menunjukkan pengucapan akronim atau istilah yang disingkat.- Elemen
phoneme
menyediakan teks yang menjelaskan caralexeme
diucapkan. Batas suku kata adalah '.' dalam alfabet IPA. Elemenphoneme
tidak dapat berisi spasi kosong saat Anda menggunakan alfabet IPA. - Saat elemen
alias
danphoneme
disediakan dengan elemengrapheme
yang sama,alias
memiliki prioritas yang lebih tinggi.
Microsoft menyediakan alat validasi untuk leksikon kustom yang membantu Anda menemukan kesalahan (dengan pesan kesalahan terperinci) dalam file leksikon kustom. Menggunakan alat ini disarankan sebelum Anda menggunakan file XML leksikon kustom dalam produksi dengan layanan Ucapan.
Contoh file leksikon kustom
Contoh XML berikut (bukan SSML) akan dimuat dalam file leksikon .xml
kustom. Saat Anda menggunakan leksikon kustom ini, "BTW" dibaca sebagai "By the way." "Benigni" dibaca dengan IPA yang disediakan "bɛˈniːnji".
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias>By the way</alias>
</lexeme>
<lexeme>
<grapheme>Benigni</grapheme>
<phoneme>bɛˈniːnji</phoneme>
</lexeme>
<lexeme>
<grapheme>😀</grapheme>
<alias>test emoji</alias>
</lexeme>
</lexicon>
Anda tidak dapat langsung mengatur pengucapan frasa dengan menggunakan leksikon kustom. Jika Anda perlu mengatur pengucapan untuk akronim atau istilah yang disingkat, cantumkan alias
terlebih dahulu, lalu kaitkan phoneme
dengan alias
itu. Contohnya:
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="ipa" xml:lang="en-US">
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>ScotlandMV</alias>
</lexeme>
<lexeme>
<grapheme>ScotlandMV</grapheme>
<phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
</lexeme>
</lexicon>
Anda juga dapat secara langsung memberikan harapan Andaalias
untuk akronim atau istilah yang disingkat. Contohnya:
<lexeme>
<grapheme>Scotland MV</grapheme>
<alias>Scotland Media Wave</alias>
</lexeme>
Contoh file XML leksikon kustom sebelumnya menggunakan alfabet IPA, yang juga dikenal sebagai set telepon IPA. Sebaiknya gunakan IPA, karena sudah menjadi standar internasional. Untuk beberapa karakter IPA, karakter tersebut memiliki versi 'tersusun sebelumnya' dan 'terurai' ketika direpresentasikan dengan Unicode. Leksikon kustom hanya mendukung Unicode yang terurai.
Layanan Ucapan mendefinisikan set fonetik untuk lokal ini: en-US
, , fr-FR
, es-ES
de-DE
, , ja-JP
zh-CN
, zh-HK
, , dan zh-TW
. Untuk informasi selengkapnya tentang alfabet fonetik layanan Ucapan, lihat rangkaian himpunan fonetik layanan Ucapan.
Anda dapat menggunakan x-microsoft-sapi
sebagai nilai untuk atribut alphabet
dengan leksikon kustom seperti yang ditunjukkan di bawah:
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="x-microsoft-sapi" xml:lang="en-US">
<lexeme>
<grapheme>BTW</grapheme>
<alias> By the way </alias>
</lexeme>
<lexeme>
<grapheme> Benigni </grapheme>
<phoneme> b eh 1 - n iy - n y iy </phoneme>
</lexeme>
</lexicon>
elemen say-as
Elemen say-as
menunjukkan jenis konten, seperti angka atau tanggal, teks elemen. Elemen ini memberikan panduan untuk mesin sintesis ucapan tentang cara mengucapkan teks tersebut.
Penggunaan say-as
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
interpret-as |
Menunjukkan jenis konten teks elemen. Untuk daftar jenis, lihat tabel berikut. | Diperlukan |
format |
Menyediakan informasi tambahan tentang pemformatan yang tepat dari teks elemen untuk jenis konten yang mungkin memiliki format ambigu. SSML menentukan format untuk jenis konten yang menggunakannya. Lihat tabel berikut. | Opsional |
detail |
Menunjukkan tingkat detail yang akan diucapkan. Misalnya, atribut ini mungkin meminta agar mesin sintesis ucapan mengucapkan tanda baca. Tidak ada nilai standar yang didefinisikan untuk detail . |
Opsional |
Jenis konten berikut didukung untuk atribut interpret-as
dan format
. Sertakan format
atribut hanya jika format
kolom tidak kosong dalam tabel ini.
Catatan
Nilai characters
dan spell-out
untuk interpret-as
atribut didukung untuk semua teks ke lokal ucapan.
Nilai atribut lainnya interpret-as
didukung untuk semua lokal bahasa berikut: Arab, Katalan, Cina, Denmark, Belanda, Inggris, Prancis, Finlandia, Jerman, Hindi, Italia, Jepang, Korea, Norwegia, Polandia, Portugis, Rusia, Spanyol, dan Swedia.
interpret-as | format | Interpretasi |
---|---|---|
characters , spell-out |
Teks diucapkan sebagai huruf individu (dieja). Mesin sintesis bicara mengucapkan:<say-as interpret-as="characters">test</say-as> Sebagai "T E S T." |
|
cardinal , number |
Tidak | Teks diucapkan sebagai nomor kardinal. Mesin sintesis bicara mengucapkan:There are <say-as interpret-as="cardinal">10</say-as> options Sebagai "Ada sepuluh opsi." |
ordinal |
Tidak | Teks diucapkan sebagai nomor urut. Mesin sintesis bicara mengucapkan:Select the <say-as interpret-as="ordinal">3rd</say-as> option Seperti "Pilih opsi ketiga." |
number_digit |
Tidak | Teks diucapkan sebagai urutan digit individu. Mesin sintesis bicara mengucapkan:<say-as interpret-as="number_digit">123456789</say-as> Sebagai "1 2 3 4 5 6 7 8 9." |
fraction |
Tidak | Teks diucapkan sebagai angka pecahan. Mesin sintesis bicara mengucapkan:<say-as interpret-as="fraction">3/8</say-as> of an inch Sebagai "tiga perdelapan inci." |
date |
dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y | Teks diucapkan sebagai tanggal. format Atribut menentukan format tanggal (d=day,m=month, dan y=year). Mesin sintesis bicara mengucapkan:Today is <say-as interpret-as="date">10-12-2016</say-as> Seperti "Hari ini adalah Oktober dua belas ribu enam belas." Diucapkan: Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as> Seperti "Hari ini adalah Desember kesepuluh dua ribu enam belas." |
time |
hms12, hms24 | Teks diucapkan sebagai waktu. Atribut format menentukan apakah waktu ditentukan menggunakan waktu berformat 12 jam (hms12) atau waktu berformat 24 jam (hms24). Gunakan titik dua untuk memisahkan angka yang mewakili jam, menit, dan detik. Berikut adalah contoh waktu yang valid: 12.35, 1.14.32, 08.15, dan 02.50.45. Mesin sintesis bicara mengucapkan:The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as> Saat "Kereta berangkat pukul 4 A M." |
duration |
hms, hm, ms | Teks ini diucapkan sebagai durasi. Atribut format menentukan format durasi (h=hour (jam), m=minute (menit), dan s=second (detik)). Mesin sintesis bicara mengucapkan:<say-as interpret-as="duration">01:18:30</say-as> Sebagai "satu jam delapan belas menit dan tiga puluh detik". Diucapkan: <say-as interpret-as="duration" format="ms">01:18</say-as> Sebagai "satu menit delapan belas detik". Tag ini hanya didukung pada bahasa Inggris dan Spanyol. |
telephone |
Tidak | Teks diucapkan sebagai nomor telepon. Mesin sintesis bicara mengucapkan:The number is <say-as interpret-as="telephone">(888) 555-1212</say-as> Sebagai "Nomor saya adalah kode area delapan delapan delapan lima lima lima satu dua satu dua." |
currency |
Tidak | Teks diucapkan sebagai mata uang. Mesin sintesis bicara mengucapkan:<say-as interpret-as="currency">99.9 USD</say-as> Sebagai "sembilan puluh sembilan dolar AS dan sembilan puluh sen." |
address |
Tidak | Teks diucapkan sebagai alamat. Mesin sintesis bicara mengucapkan:I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as> Seperti "Saya berada di 150th Court Northeast Redmond Washington." |
name |
Tidak | Teks diucapkan sebagai nama orang. Mesin sintesis bicara mengucapkan:<say-as interpret-as="name">ED</say-as> Sebagai [æd]. Dalam nama Mandarin, beberapa karakter dilafalkan berbeda ketika mereka muncul dalam nama keluarga. Misalnya, mesin sintesis ucapan mengatakan 仇 di <say-as interpret-as="name">仇先生</say-as> Sebagai [qiú] bukan [chóu]. |
contoh say-as
Nilai yang didukung untuk atribut say-as
elemen dijelaskan sebelumnya.
Mesin sintesis bicara berbicara contoh berikut sebagai "Permintaan pertama Anda adalah untuk satu kamar pada tanggal sembilan belas Oktober dua puluh sepuluh dengan kedatangan awal pada dua belas tiga puluh lima PM."
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<p>
Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
</p>
</voice>
</speak>
sub elemen
sub
Gunakan elemen untuk menunjukkan bahwa nilai teks atribut alias harus diucapkan alih-alih teks yang diapit elemen. Dengan cara ini, SSML berisi bentuk lisan dan tertulis.
Penggunaan sub
atribut elemen dijelaskan dalam tabel berikut.
Atribut | Deskripsi | Diperlukan atau opsional |
---|---|---|
alias |
Nilai teks yang harus diucapkan alih-alih teks terlampir elemen. | Diperlukan |
sub contoh
Nilai yang didukung untuk atribut sub
elemen dijelaskan sebelumnya.
Mesin sintesis ucapan berbicara contoh berikut sebagai "World Wide Web Consortium."
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
<voice name="en-US-AvaMultilingualNeural">
<sub alias="World Wide Web Consortium">W3C</sub>
</voice>
</speak>
Pengucapan dengan MathML
Bahasa Markup Matematika (MathML) adalah bahasa markup yang mematuhi XML yang menjelaskan konten dan struktur matematika. Layanan Ucapan dapat menggunakan MathML sebagai teks input untuk mengucapkan notasi matematika dengan benar dalam audio output.
Catatan
Elemen MathML (tag) saat ini didukung di lokal berikut: de-DE
, en-US
en-GB
fr-FR
es-MX
en-AU
es-ES
fr-CA
, , it-IT
, ja-JP
, , ko-KR
, , pt-BR
dan .zh-CN
Semua elemen dari spesifikasi MathML 2.0 dan MathML 3.0 didukung, kecuali elemen Elementary Math MathML 3.0.
Perhatikan elemen dan atribut MathML ini:
- Atribut
xmlns
di<math xmlns="http://www.w3.org/1998/Math/MathML">
bersifat opsional. - Elemen
semantics
,annotation
, danannotation-xml
tidak menghasilkan ucapan, sehingga diabaikan. - Jika elemen tidak dikenali, elemen tersebut diabaikan, dan elemen turunan di dalamnya masih diproses.
Sintaks XML tidak mendukung entitas MathML, jadi Anda harus menggunakan karakter unicode yang sesuai untuk mewakili entitas, misalnya, entitas ©
harus diwakili oleh karakter ©
unicode-nya, jika tidak, kesalahan terjadi.
Contoh MathML
Output teks ke ucapan untuk contoh ini adalah "kuadrat plus b kuadrat sama dengan kuadrat c".
<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-JennyNeural'>
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<msup>
<mi>a</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>=</mo>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</math>
</voice>
</speak>