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ą.
Alfabety fonetyczne 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.xml
usł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 jedenlexeme
element. Leksykon zawiera niezbędnyxml: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ć. Elementlexicon
maalphabet
również atrybut wskazujący alfabet używany w leksykonie. Możliwe wartości toipa
ix-microsoft-sapi
. - Każdy
lexeme
element zawiera co najmniej jeden element i cographeme
najmniej jedengrapheme
element ,alias
iphoneme
. Elementlexeme
uwzględnia wielkość liter w niestandardowym leksykonie. Jeśli na przykład podasz tylko numer telefonu "lexeme
Hello", nie będzie działać dlalexeme
"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 wymawianialexeme
. Granica sylalna to "". w alfabecie IPA. Elementphoneme
nie może zawierać białych znaków podczas korzystania z alfabetu IPA. - Gdy element
alias
iphoneme
jest dostarczany z tym samymgrapheme
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 alias
element , a następnie skojarz z tym alias
elementem 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-FR
de-DE
, es-ES
ja-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-US
es-MX
fr-CA
fr-FR
es-ES
en-GB
ja-JP
ko-KR
it-IT
pt-BR
i .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. semantics
Elementy ,annotation
iannotation-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 ©
powinna być reprezentowana przez jego znaki ©
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>