Wymowa za pomocą języka SSML

Możesz użyć języka znaczników syntezy mowy (SSML) z tekstem na mowę, aby określić, jak mowa jest wymawiana. Na przykład możesz użyć języka SSML z phonemami i niestandardowym leksykonem, aby poprawić wymowę. Możesz również użyć języka SSML, aby zdefiniować sposób wymawiania wyrazu lub wyrażenia matematycznego.

Zapoznaj się z poniższymi sekcjami, aby uzyskać szczegółowe informacje na temat używania elementów SSML w celu poprawy wymowy. Aby uzyskać więcej informacji na temat składni SSML, zobacz Struktura i zdarzenia dokumentu SSML.

phoneme, element

Element phoneme jest używany do wymowy fonetycznej w dokumentach SSML. Zawsze udostępniaj czytelną dla człowieka mowę jako rezerwową.

Telefon alfabetyczne składają się z telefonów, które składają się z liter, cyfr lub znaków, czasami w połączeniu. Każdy telefon opisuje unikatowy dźwięk mowy. Alfabet fonetyczny jest w przeciwieństwie do alfabetu łacińskiego, gdzie każda litera może reprezentować wiele głosowych dźwięków. Rozważ różne en-US wymowy litery "c" w słowach "cukierki" i "zaprzestanie" lub różne wymowy litery kombinacji "th" w słowach "thing" i "te".

Uwaga

Aby uzyskać listę ustawień regionalnych obsługujących telefony, zobacz przypisy dolne w tabeli obsługi języka.

phoneme Użycie atrybutów elementu opisano w poniższej tabeli.

Atrybut opis Wymagane lub opcjonalne
alphabet Alfabet fonetyczny używany podczas syntezowania wymowy ciągu w atrybucie ph . Ciąg określający alfabet musi być określony w małych literach. Poniżej przedstawiono możliwe alfabety, które można określić:
Alfabet ma zastosowanie tylko do phoneme elementu w elemecie .
Opcjonalnie
ph Ciąg zawierający telefony, które określają wymowę słowa w elemecie phoneme . Jeśli określony ciąg zawiera nierozpoznane telefony, tekst na mowę odrzuca cały dokument SSML i nie generuje żadnych danych wyjściowych mowy określonych w dokumencie.

Dla ipa, aby podkreślić jedną sylaable, umieszczając symbol stresu przed tą sylabą, musisz oznaczyć wszystkie sylaby dla słowa. Lub inaczej, sylaable przed tym symbolem stresu jest zestresowany. Dla sapi, jeśli chcesz podkreślić jedną sylabę, musisz umieścić symbol stresu po tej sylaby, czy wszystkie sylaby wyrazu są oznaczone.
Wymagania

przykłady phoneme

Obsługiwane wartości atrybutów phoneme elementu zostały opisane wcześniej. W dwóch pierwszych przykładach wartości ph="tə.ˈmeɪ.toʊ" lub ph="təmeɪˈtoʊ" są określone, aby podkreślić sylabę 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>

Niestandardowy leksykon

Możesz zdefiniować, w jaki sposób pojedyncze jednostki (takie jak firma, termin medyczny lub emoji) są odczytywane w języku SSML przy użyciu elementy phoneme i podrzędne . Aby zdefiniować sposób odczytu wielu jednostek, utwórz niestandardowy plik leksykonu XML ze strukturą XML. Następnie przekażesz niestandardowy plik XML leksykonu i odwołujesz się do niego za pomocą elementu SSML lexicon .

Uwaga

Aby uzyskać listę ustawień regionalnych, które obsługują niestandardowy leksykon, zobacz przypisy dolne w tabeli obsługi języka.

Element lexicon nie jest obsługiwany przez interfejs API long audio. W przypadku zamiany tekstu długiego na mowę użyj interfejsu API syntezy wsadowej (wersja zapoznawcza).

lexicon Użycie atrybutów elementu opisano w poniższej tabeli.

Atrybut opis Wymagane lub opcjonalne
uri Identyfikator URI publicznie dostępnego niestandardowego pliku XML leksykonu .xml z rozszerzeniem lub .pls . Korzystanie z usługi Azure Blob Storage jest zalecane, ale nie jest wymagane. Aby uzyskać więcej informacji na temat niestandardowego pliku leksykonu, zobacz Wymowa Lexicon Specification (PLS) w wersji 1.0. Wymagania

Niestandardowe przykłady leksykonów

Obsługiwane wartości atrybutów lexicon elementu zostały opisane wcześniej.

Po opublikowaniu niestandardowego leksykonu możesz odwoływać się do niego z poziomu kodu SSML. Poniższy przykład SSML odwołuje się do niestandardowego leksykonu przekazanego do https://www.example.com/customlexicon.xmlusługi . Obsługujemy adresy URL leksykonów z usługi Azure Blob Storage, Advanced Media Services (AMS) Storage i GitHub. Należy jednak pamiętać, że inne publiczne adresy URL mogą nie być zgodne.

<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>

Niestandardowy plik leksykonu

Aby zdefiniować sposób odczytu wielu jednostek, możesz zdefiniować je w niestandardowym pliku XML leksykonu .xml za pomocą rozszerzenia lub .pls .

Uwaga

Niestandardowy plik leksykonu jest prawidłowym dokumentem XML, ale nie może być używany jako dokument SSML.

Poniżej przedstawiono niektóre ograniczenia niestandardowego pliku leksykonu:

  • Rozmiar pliku: niestandardowy rozmiar pliku leksykonu jest ograniczony do maksymalnie 100 KB. Jeśli rozmiar pliku przekroczy limit 100 KB, żądanie syntezy zakończy się niepowodzeniem. Leksykon można podzielić na wiele leksykonów i uwzględnić je w języku SSML, jeśli rozmiar pliku przekracza 100 KB.
  • Odświeżanie pamięci podręcznej leksykonu leksykonu: niestandardowy leksykon jest buforowany przy użyciu identyfikatora URI jako klucza tekstu na mowę po pierwszym załadowaniu. Leksykon z tym samym identyfikatorem URI nie jest ponownie ładowany w ciągu 15 minut, więc zmiana leksykonu niestandardowego musi poczekać 15 minut, aby w ogóle obowiązywać.

Obsługiwane elementy i atrybuty niestandardowego pliku XML leksykonu są opisane w specyfikacji lexicon wymowy (PLS) w wersji 1.0. Oto kilka przykładów obsługiwanych elementów i atrybutów:

  • Element lexicon zawiera co najmniej jeden lexeme element. Leksykon zawiera niezbędny xml:lang atrybut, aby wskazać, dla których ustawień regionalnych należy zastosować. Jeden niestandardowy leksykon jest ograniczony do jednego ustawienia regionalnego zgodnie z projektem, więc jeśli zastosujesz go do innych ustawień regionalnych, nie będzie działać. Element lexicon ma alphabet również atrybut wskazujący alfabet używany w leksykonie. Możliwe wartości to ipa i x-microsoft-sapi.
  • Każdy lexeme element zawiera co najmniej jeden element i co graphemenajmniej jeden grapheme element , aliasi phoneme . Element lexeme uwzględnia wielkość liter w niestandardowym leksykonie. Jeśli na przykład podasz tylko numer telefonu " lexeme Hello", nie będzie działać dla lexeme "hello".
  • Element grapheme zawiera tekst opisujący ortografię.
  • alias Elementy są używane do wskazywania wymowy akronimu lub skróconego terminu.
  • Element phoneme zawiera tekst opisujący sposób wymawiania lexeme . Granica sylalna to "". w alfabecie IPA. Element phoneme nie może zawierać białych znaków podczas korzystania z alfabetu IPA.
  • Gdy element alias i phoneme jest dostarczany z tym samym grapheme elementem, alias ma wyższy priorytet.

Firma Microsoft udostępnia narzędzie do sprawdzania poprawności niestandardowego leksykonu , które ułatwia znajdowanie błędów (ze szczegółowymi komunikatami o błędach) w niestandardowym pliku leksykonu. Użycie narzędzia jest zalecane przed użyciem niestandardowego pliku XML leksykonu w środowisku produkcyjnym z usługą Mowa.

Przykłady niestandardowych plików leksykonów

Poniższy przykład XML (nie SSML) będzie zawarty w niestandardowym pliku leksykonu .xml . W przypadku korzystania z tego niestandardowego leksykonu "BTW" jest odczytywany jako "By the way". "Benigni" jest odczytywany z podanym adresem IPA "bɛ Cortanniː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>

Nie można bezpośrednio ustawić wymowy frazy przy użyciu niestandardowego leksykonu. Jeśli musisz ustawić wymowę dla akronimu lub skróconego terminu, najpierw podaj aliaselement , a następnie skojarz z tym aliaselementem phoneme . Na przykład:

<?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>

Możesz również bezpośrednio podać oczekiwany alias termin dla skrótu lub skrótu. Na przykład:

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

Powyższe niestandardowe przykłady plików XML leksykonu używają alfabetu IPA, który jest również znany jako zestaw telefonów IPA. Zalecamy użycie usługi IPA, ponieważ jest to międzynarodowy standard. W przypadku niektórych znaków IPA są to "wstępnie skompilowane" i "rozłożone" wersje, gdy są one reprezentowane za pomocą formatu Unicode. Niestandardowy leksykon obsługuje tylko zdekompilowany kod Unicode.

Usługa Mowa definiuje zestaw fonetyczny dla tych ustawień regionalnych: en-US, , fr-FRde-DE, es-ESja-JP, zh-CN, , zh-HK, i zh-TW. Aby uzyskać więcej informacji na temat szczegółowego alfabetu fonetycznego usługi mowa, zobacz zestawy fonetyczne usługi mowa.

Możesz użyć x-microsoft-sapi wartości jako atrybutu alphabet z niestandardowymi leksykonami, jak pokazano tutaj:

<?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>

say-as, element

Element say-as wskazuje typ zawartości, taki jak liczba lub data, tekstu elementu. Ten element zawiera wskazówki dla aparatu syntezy mowy o tym, jak wymawiać tekst.

say-as Użycie atrybutów elementu opisano w poniższej tabeli.

Atrybut opis Wymagane lub opcjonalne
interpret-as Wskazuje typ zawartości tekstu elementu. Aby uzyskać listę typów, zobacz poniższą tabelę. Wymagania
format Zawiera dodatkowe informacje na temat dokładnego formatowania tekstu elementu dla typów zawartości, które mogą mieć niejednoznaczne formaty. SSML definiuje formaty dla typów zawartości, które ich używają. Zobacz poniższą tabelę. Opcjonalnie
detail Wskazuje poziom szczegółowości, który ma być wypowiadany. Na przykład ten atrybut może zażądać, aby aparat syntezy mowy wymawiał znaki interpunkcyjne. Nie zdefiniowano żadnych standardowych wartości dla elementu detail. Opcjonalnie

Następujące typy zawartości są obsługiwane dla interpret-as atrybutów i format . format Dołącz atrybut tylko wtedy, gdy format kolumna nie jest pusta w tej tabeli.

Uwaga

Wartości characters i spell-out dla atrybutu interpret-as są obsługiwane dla wszystkich ustawień regionalnych zamiany tekstu na mowę. Inne interpret-as wartości atrybutów są obsługiwane dla wszystkich ustawień regionalnych następujących języków: arabski, kataloński, chiński, duński, holenderski, angielski, francuski, fiński, niemiecki, hindi, włoski, japoński, koreański, norweski, polski, portugalski, rosyjski, hiszpański i szwedzki.

interpret-as format Interpretacja
characters, spell-out Tekst jest mówiony jako pojedyncze litery (napisane). Aparat syntezy mowy wymawia:

<say-as interpret-as="characters">test</say-as>

Jako "T E S T".
cardinal, number Brak Tekst jest mówiony jako liczba kardynalna. Aparat syntezy mowy wymawia:

There are <say-as interpret-as="cardinal">10</say-as> options

Jako "Istnieją dziesięć opcji".
ordinal Brak Tekst jest mówiony jako liczba porządkowa. Aparat syntezy mowy wymawia:

Select the <say-as interpret-as="ordinal">3rd</say-as> option

Jako "Wybierz trzecią opcję".
number_digit Brak Tekst jest mówiony jako sekwencja poszczególnych cyfr. Aparat syntezy mowy wymawia:

<say-as interpret-as="number_digit">123456789</say-as>

Jako "1 2 3 4 5 6 7 8 9".
fraction Brak Tekst jest mówiony jako liczba ułamkowa. Aparat syntezy mowy wymawia:

<say-as interpret-as="fraction">3/8</say-as> of an inch

Jako "trzy ósme części cala".
date dmy, mdy, ymd, ydm, ym, my, md, dm, d, m, y Tekst jest mówiony jako data. Atrybut format określa format daty (d=day, m=month i y=year). Aparat syntezy mowy wymawia:

Today is <say-as interpret-as="date">10-12-2016</say-as>

Jak "Dzisiaj jest dwunasty październik dwa tysiące szesnaście."
Wypowiada:

Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as>

Jak "Dzisiaj jest grudzień dziesiąty dwa tysiące szesnaście."
time hms12, hms24 Tekst jest mówiony jako czas. Atrybut format określa, czy czas jest określony przy użyciu zegara 12-godzinnego (hms12) lub zegara 24-godzinnego (hms24). Użyj dwukropka, aby oddzielić liczby reprezentujące godziny, minuty i sekundy. Oto kilka prawidłowych przykładów czasu: 12:35, 1:14:32, 08:15 i 02:50:45. Aparat syntezy mowy wymawia:

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

Jak "Pociąg odchodzi na cztery M."
duration hms, hm, ms Tekst jest mówiony jako czas trwania. Atrybut format określa format czasu trwania (h=hour, m=minute i s=second). Aparat syntezy mowy wymawia:

<say-as interpret-as="duration">01:18:30</say-as>

Jako "jedna godzina osiemnaście minut i trzydzieści sekund".
Wypowiada:

<say-as interpret-as="duration" format="ms">01:18</say-as>

Jako "jedna minuta i osiemnaście sekund".
Ten tag jest obsługiwany tylko w języku angielskim i hiszpańskim.
telephone Brak Tekst jest mówiony jako numer telefonu. Aparat syntezy mowy wymawia:

The number is <say-as interpret-as="telephone">(888) 555-1212</say-as>

Jak "Mój numer to kod obszaru osiem ośmiu ośmiu pięciu pięciu pięciu pięć jeden jeden dwa."
currency Brak Tekst jest mówiony jako waluta. Aparat syntezy mowy wymawia:

<say-as interpret-as="currency">99.9 USD</say-as>

Jako "dziewięćdziesiąt dziewięć dolarów amerykańskich i dziewięćdziesiąt centów."
address Brak Tekst jest mówiony jako adres. Aparat syntezy mowy wymawia:

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

Jako "Jestem w 150th Court Northeast Redmond Washington."
name Brak Tekst jest mówiony jako imię osoby. Aparat syntezy mowy wymawia:

<say-as interpret-as="name">ED</say-as>

Jako [æd].
W chińskich nazwach niektóre znaki wymawiają się inaczej, gdy pojawiają się w imieniu rodzinnym. Na przykład aparat syntezy mowy mówi 仇 w

<say-as interpret-as="name">仇先生</say-as>

Jako [qiú] zamiast [chóu].

przykłady say-as

Obsługiwane wartości atrybutów say-as elementu zostały opisane wcześniej.

Aparat syntezy mowy mówi następujący przykład jako "Twoje pierwsze żądanie było dla jednego pokoju w październiku dwudziestu dwudziestu dziesięciu z wczesnym przybyciem na dwanaście trzydziestu pięciu 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>

element podrzędny

sub Użyj elementu , aby wskazać, że wartość tekstowa atrybutu aliasu powinna być wymawiana zamiast ujętego tekstu elementu. W ten sposób SSML zawiera zarówno postać mówiona, jak i napisana.

sub Użycie atrybutów elementu opisano w poniższej tabeli.

Atrybut opis Wymagane lub opcjonalne
alias Wartość tekstowa, która powinna być wymawiana zamiast ujętego tekstu elementu. Wymagania

przykłady podrzędne

Obsługiwane wartości atrybutów sub elementu zostały opisane wcześniej.

Aparat syntezy mowy mówi w poniższym przykładzie jako "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>

Wymowa przy użyciu języka MathML

Język znaczników matematycznych (MathML) to język znaczników zgodny ze standardem XML, który opisuje zawartość matematyczną i strukturę. Usługa mowa może używać języka MathML jako tekstu wejściowego, aby prawidłowo wymawiać notacje matematyczne w wyjściowym dźwięku.

Uwaga

Elementy MathML (tagi) są obecnie obsługiwane w następujących ustawieniach regionalnych: de-DE, , en-AU, en-USes-MXfr-CAfr-FRes-ESen-GBja-JPko-KRit-ITpt-BRi .zh-CN

Obsługiwane są wszystkie elementy specyfikacji MathML 2.0 i MathML 3.0, z wyjątkiem elementów matematycznych MathML 3.0.

Zanotuj te elementy i atrybuty mathML:

  • Atrybut xmlns w pliku <math xmlns="http://www.w3.org/1998/Math/MathML"> jest opcjonalny.
  • semanticsElementy , annotationi annotation-xml nie generują mowy, więc są ignorowane.
  • Jeśli element nie jest rozpoznawany, jest ignorowany, a elementy podrzędne w nim są nadal przetwarzane.

Składnia XML nie obsługuje jednostek MathML, dlatego należy użyć odpowiednich znaków Unicode do reprezentowania jednostek, na przykład jednostka &copy; powinna być reprezentowana przez jego znaki&#x00A9;Unicode , w przeciwnym razie wystąpi błąd.

Przykłady języka MathML

Tekst wyjściowy mowy dla tego przykładu to "kwadrat plus b squared równa c squared".

<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>

Następne kroki