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 satu lexeme elemen. Leksikon berisi atribut xml: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 ini lexicon juga memiliki alphabet atribut untuk menunjukkan alfabet yang digunakan dalam leksikon. Nilai yang mungkin adalah ipa dan x-microsoft-sapi.
  • Setiap lexeme elemen mengandung setidaknya satu graphemeelemen dan satu atau lebihgrapheme, alias, dan phoneme elemen. Elemen lexeme bersifat sensitif terhadap huruf besar dan kecil dalam leksikon kustom. Misalnya, jika Anda hanya menyediakan fonem untuk lexeme "Halo", itu tidak berfungsi untuk lexeme "halo".
  • Elemen grapheme berisi teks yang menjelaskan ortografi.
  • aliasElemen digunakan untuk menunjukkan pengucapan akronim atau istilah yang disingkat.
  • Elemen phoneme menyediakan teks yang menjelaskan cara lexeme diucapkan. Batas suku kata adalah '.' dalam alfabet IPA. Elemen phoneme tidak dapat berisi spasi kosong saat Anda menggunakan alfabet IPA.
  • Saat elemen alias dan phoneme disediakan dengan elemen grapheme 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-ESde-DE, , ja-JPzh-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-USen-GBfr-FRes-MXen-AUes-ESfr-CA, , it-IT, ja-JP, , ko-KR, , pt-BRdan .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, dan annotation-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 &copy; harus diwakili oleh karakter &#x00A9;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>

Langkah berikutnya