Struktura i zdarzenia dokumentu SSML
Język znaczników syntezy mowy (SSML) z tekstem wejściowym określa strukturę, zawartość i inne cechy tekstu na dane wyjściowe mowy. Na przykład można użyć języka SSML do zdefiniowania akapitu, zdania, przerwania lub wstrzymania lub ciszy. Tekst można opakowować za pomocą tagów zdarzeń, takich jak zakładka lub viseme, które mogą być przetwarzane później przez aplikację.
Szczegółowe informacje na temat struktury elementów w dokumencie SSML można znaleźć w poniższych sekcjach.
Uwaga
Oprócz neuronowych głosów usługi Azure AI Speech (innych niż HD) można również używać głosów usługi Azure AI Speech high definition (HD) i neuronowych głosów usługi Azure OpenAI (HD i innych niż HD). Głosy HD zapewniają wyższą jakość w przypadku bardziej wszechstronnych scenariuszy.
Niektóre głosy nie obsługują wszystkich tagów języka SSML (Speech Synthesis Markup Language). Obejmuje to tekst neuronowy do mowy głosów HD, głosów osobistych i osadzonych głosów.
- W przypadku głosów usługi Azure AI Speech high definition (HD) sprawdź obsługę języka SSML tutaj.
- W przypadku osobistego głosu możesz znaleźć obsługę języka SSML tutaj.
- W przypadku osadzonych głosów sprawdź obsługę języka SSML tutaj.
Struktura dokumentu
Implementacja usługi Mowa języka SSML jest oparta na języku Speech Synthesis Markup Language w wersji 1.0 konsorcjum World Wide Web Consortium. Elementy obsługiwane przez mowę mogą różnić się od standardu W3C.
Każdy dokument SSML jest tworzony przy użyciu elementów lub tagów SSML. Te elementy służą do dostosowywania głosu, stylu, skoku, prosody, głośności i nie tylko.
Oto podzbiór podstawowej struktury i składni dokumentu 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>
Niektóre przykłady zawartości, które są dozwolone w każdym elemercie, są opisane na poniższej liście:
audio
: Treśćaudio
elementu może zawierać zwykły tekst lub znacznikI SSML, które są mówione, jeśli plik dźwiękowy jest niedostępny lub niemożliwy do odtworzenia. Elementaudio
może również zawierać tekst i następujące elementy:audio
, ,break
phoneme
s
prosody
p
say-as
i .sub
bookmark
: ten element nie może zawierać tekstu ani żadnych innych elementów.break
: ten element nie może zawierać tekstu ani żadnych innych elementów.emphasis
: Ten element może zawierać tekst i następujące elementy:audio
, ,emphasis
phoneme
lang
prosody
break
say-as
, i .sub
lang
: ten element może zawierać wszystkie inne elementy z wyjątkiemmstts:backgroundaudio
,voice
ispeak
.lexicon
: ten element nie może zawierać tekstu ani żadnych innych elementów.math
: ten element może zawierać tylko elementy tekstowe i MathML.mstts:audioduration
: ten element nie może zawierać tekstu ani żadnych innych elementów.mstts:backgroundaudio
: ten element nie może zawierać tekstu ani żadnych innych elementów.mstts:embedding
: Ten element może zawierać tekst i następujące elementy:audio
, ,emphasis
phoneme
lang
prosody
break
say-as
, i .sub
mstts:express-as
: Ten element może zawierać tekst i następujące elementy:audio
, ,emphasis
phoneme
lang
prosody
break
say-as
, i .sub
mstts:silence
: ten element nie może zawierać tekstu ani żadnych innych elementów.mstts:viseme
: ten element nie może zawierać tekstu ani żadnych innych elementów.p
: Ten element może zawierać tekst i następujące elementy:audio
, ,phoneme
say-as
prosody
sub
break
mstts:express-as
, i .s
phoneme
: ten element może zawierać tylko tekst i żadne inne elementy.prosody
: Ten element może zawierać tekst i następujące elementy:audio
, ,p
prosody
phoneme
say-as
break
sub
, i .s
s
: ten element może zawierać tekst i następujące elementy:audio
, ,break
,prosody
phoneme
,say-as
mstts:express-as
isub
.say-as
: ten element może zawierać tylko tekst i żadne inne elementy.sub
: ten element może zawierać tylko tekst i żadne inne elementy.speak
: element główny dokumentu SSML. Ten element może zawierać następujące elementy:mstts:backgroundaudio
ivoice
.voice
: ten element może zawierać wszystkie inne elementy z wyjątkiemmstts:backgroundaudio
ispeak
.
Usługa rozpoznawania mowy automatycznie obsługuje interpunkcję zgodnie z potrzebami, na przykład wstrzymując po okresie lub używając poprawnej intonacji, gdy zdanie kończy się znakiem zapytania.
Znaki specjalne
Aby użyć znaków &
, <
i >
w obrębie wartości lub tekstu elementu SSML, należy użyć formatu jednostki. W szczególności należy używać &
zamiast &
, <
zamiast <
, i używać >
zamiast >
. W przeciwnym razie kod SSML nie jest poprawnie analizowany.
Na przykład określ green & yellow
wartość zamiast green & yellow
. Następujący kod SSML jest analizowany zgodnie z oczekiwaniami:
<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 & yellow.
</voice>
</speak>
Znaki specjalne, takie jak znaki cudzysłowu, apostrofy i nawiasy kwadratowe, muszą zostać uniknięci. Aby uzyskać więcej informacji, zobacz Extensible Markup Language (XML) 1.0: Dodatek D.
Podwójne lub pojedyncze znaki cudzysłowu muszą zawierać wartości atrybutów. Na przykład <prosody volume="90">
i <prosody volume='90'>
są poprawnie sformułowane, prawidłowe elementy, ale <prosody volume=90>
nie są rozpoznawane.
Mów element główny
Element speak
zawiera informacje, takie jak wersja, język i definicja słownictwa znaczników. Element speak
jest elementem głównym wymaganym dla wszystkich dokumentów SSML. Należy określić język domyślny w elemecie speak
, niezależnie od tego, czy język jest dostosowywany w innym miejscu, takim jak w elemecie lang
.
Oto składnia elementu speak
:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Atrybut | opis | Wymagane lub opcjonalne |
---|---|---|
version |
Wskazuje wersję specyfikacji SSML używanej do interpretowania znaczników dokumentu. Bieżąca wersja to "1.0". | Wymagania |
xml:lang |
Język dokumentu głównego. Wartość może zawierać kod języka, taki jak (angielski) lub ustawienia regionalne, takie jak en en-US (angielski — Stany Zjednoczone). |
Wymagania |
xmlns |
Identyfikator URI dokumentu definiujący słownictwo znaczników (typy elementów i nazwy atrybutów) dokumentu SSML. Bieżący identyfikator URI to "http://www.w3.org/2001/10/synthesis". | Wymagania |
Element speak
musi zawierać co najmniej jeden element głosu.
przykłady mówienia
Obsługiwane wartości atrybutów speak
elementu zostały opisane wcześniej.
Przykład pojedynczego głosu
W tym przykładzie użyto en-US-AvaNeural
głosu. Aby uzyskać więcej przykładów, zobacz przykłady głosu.
<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>
Dodawanie przerwania
break
Użyj elementu , aby zastąpić domyślne zachowanie podziałów lub wstrzymuje się między wyrazami. W przeciwnym razie usługa rozpoznawania mowy automatycznie wstawia wstrzymywanie.
break
Użycie atrybutów elementu opisano w poniższej tabeli.
Atrybut | opis | Wymagane lub opcjonalne |
---|---|---|
strength |
Względny czas trwania wstrzymania przy użyciu jednej z następujących wartości:
|
Opcjonalnie |
time |
Bezwzględny czas trwania wstrzymania w sekundach (na przykład 2s ) lub milisekund (na przykład 500ms ). Prawidłowe wartości wahają się od 0 do 20000 milisekund. Jeśli ustawisz wartość większą niż obsługiwana wartość maksymalna, usługa używa wartości 20000ms . time Jeśli atrybut jest ustawiony, strength atrybut jest ignorowany. |
Opcjonalnie |
Poniżej przedstawiono więcej szczegółów dotyczących atrybutu strength
.
Mocne strony | Względny czas trwania |
---|---|
X-weak | 250 ms |
Tydzień | 500 ms |
Śred. | 750 ms |
Silna | 1000 ms |
X-strong | 1250 ms |
Przykłady przerwania
Obsługiwane wartości atrybutów break
elementu zostały opisane wcześniej. Następujące trzy sposoby dodawania podziałów 750 ms.
<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>
Dodaj milczenie
mstts:silence
Użyj elementu , aby wstawić wstrzymanie przed tekstem lub po nim albo między dwoma sąsiednimi zdaniami.
Jedną z różnic między elementami mstts:silence
i break
jest to, że break
element można wstawić w dowolnym miejscu w tekście. Milczenie działa tylko na początku lub na końcu tekstu wejściowego lub na granicy dwóch sąsiednich zdań.
Ustawienie ciszy jest stosowane do całego tekstu wejściowego w obrębie otaczającego voice
elementu. Aby ponownie zresetować lub zmienić ustawienie ciszy, należy użyć nowego voice
elementu z tym samym głosem lub innym głosem.
mstts:silence
Użycie atrybutów elementu opisano w poniższej tabeli.
Atrybut | opis | Wymagane lub opcjonalne |
---|---|---|
type |
Określa, gdzie i jak dodać milczenie. Obsługiwane są następujące typy ciszy:
Bezwzględny typ ciszy (z sufiksem -exact ) zastępuje wszelkie inne naturalne wiodące lub końcowe milczenie. Typy ciszy bezwzględnej mają pierwszeństwo przed odpowiadającym im typem nie-bezwzględnym. Jeśli na przykład ustawisz zarówno typy, jak Leading i Leading-exact , Leading-exact typ zostanie zastosowany. Zdarzenie WordBoundary ma pierwszeństwo przed ustawieniami ciszy związanej z interpunkcją, w tym Comma-exact , Semicolon-exact lub Enumerationcomma-exact . Jeśli używasz ustawień WordBoundary ciszy związanej z zdarzeniem i interpunkcją, ustawienia ciszy związane z interpunkcją nie będą obowiązywać. |
Wymagania |
Value |
Czas trwania wstrzymania w sekundach (na przykład 2s ) lub milisekund (na przykład 500ms ). Prawidłowe wartości wahają się od 0 do 20000 milisekund. Jeśli ustawisz wartość większą niż obsługiwana wartość maksymalna, usługa używa wartości 20000ms . |
Wymagania |
przykłady ciszy mstts
Obsługiwane wartości atrybutów mstts:silence
elementu zostały opisane wcześniej.
W tym przykładzie mstts:silence
służy do dodawania 200 ms ciszy między dwoma zdaniami.
<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>
W tym przykładzie mstts:silence
służy do dodawania 50 ms ciszy na przecinek, 100 ms ciszy na średnik i 150 ms ciszy na przecinek wyliczenia.
<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>
Określanie akapitów i zdań
p
Elementy i s
służą do oznaczania odpowiednio akapitów i zdań. W przypadku braku tych elementów usługa rozpoznawania mowy automatycznie określa strukturę dokumentu SSML.
Przykłady akapitów i zdań
W poniższym przykładzie zdefiniowano dwa akapity zawierające zdania. W drugim akapicie usługa rozpoznawania mowy automatycznie określa strukturę zdań, ponieważ nie są one zdefiniowane w dokumencie 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>
Element zakładki
Możesz użyć bookmark
elementu w języku SSML, aby odwołać się do określonej lokalizacji w sekwencji tekstu lub tagu. Następnie użyjesz zestawu SDK usługi Mowa i zasubskrybujesz BookmarkReached
zdarzenie, aby uzyskać przesunięcie każdego znacznika w strumieniu audio. Element bookmark
nie jest mówiony. Aby uzyskać więcej informacji, zobacz Subskrybowanie zdarzeń syntezatora.
bookmark
Użycie atrybutów elementu opisano w poniższej tabeli.
Atrybut | opis | Wymagane lub opcjonalne |
---|---|---|
mark |
Tekst odwołania do bookmark elementu. |
Wymagania |
Przykłady zakładek
Obsługiwane wartości atrybutów bookmark
elementu zostały opisane wcześniej.
Na przykład możesz chcieć znać przesunięcie czasu każdego wyrazu kwiatu w następującym fragmencie kodu:
<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>
Viseme, element
Viseme to wizualny opis fonemy w języku mówionym. Definiuje położenie twarzy i ust, gdy osoba mówi. Możesz użyć mstts:viseme
elementu w języku SSML, aby zażądać danych wyjściowych viseme. Aby uzyskać więcej informacji, zobacz Uzyskiwanie pozycji twarzy z viseme.
Ustawienie viseme jest stosowane do całego tekstu wejściowego w jego otaczającym voice
elemecie. Aby ponownie zresetować lub zmienić ustawienie viseme, należy użyć nowego voice
elementu z tym samym głosem lub innym głosem.
viseme
Użycie atrybutów elementu opisano w poniższej tabeli.
Atrybut | opis | Wymagane lub opcjonalne |
---|---|---|
type |
Typ danych wyjściowych viseme.
|
Wymagania |
Uwaga
redlips_front
Obecnie obsługuje tylko neuronowe głosy w en-US
ustawieniach regionalnych i FacialExpression
obsługuje głosy neuronowe w en-US
ustawieniach regionalnych izh-CN
.
Przykłady viseme
Obsługiwane wartości atrybutów viseme
elementu zostały opisane wcześniej.
Ten fragment kodu SSML ilustruje sposób żądania mieszania kształtów z syntetyzowaną mową.
<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>