Udostępnij za pośrednictwem


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.

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. Element audio może również zawierać tekst i następujące elementy: audio, , breakphonemesprosodypsay-asi .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, , emphasisphonemelangprosodybreaksay-as, i .sub
  • lang: ten element może zawierać wszystkie inne elementy z wyjątkiem mstts:backgroundaudio, voicei speak.
  • 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, , emphasisphonemelangprosodybreaksay-as, i .sub
  • mstts:express-as: Ten element może zawierać tekst i następujące elementy: audio, , emphasisphonemelangprosodybreaksay-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, , phonemesay-asprosodysubbreakmstts: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, , pprosodyphonemesay-asbreaksub, i .s
  • s: ten element może zawierać tekst i następujące elementy: audio, , break, prosodyphoneme, say-asmstts:express-asi sub.
  • 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 i voice.
  • voice: ten element może zawierać wszystkie inne elementy z wyjątkiem mstts:backgroundaudio i speak.

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ć &amp; zamiast &, &lt; zamiast <, i używać &gt; zamiast >. W przeciwnym razie kod SSML nie jest poprawnie analizowany.

Na przykład określ green &amp; 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 &amp; 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:
  • x-weak
  • słaby
  • średni (wartość domyślna)
  • silny
  • x-strong
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:
  • Leading – Dodatkowa cisza na początku tekstu. Ustawiona wartość jest dodawana do naturalnej ciszy przed rozpoczęciem tekstu.
  • Leading-exact – Milczenie na początku tekstu. Wartość jest bezwzględną długością ciszy.
  • Tailing – Dodatkowa cisza na końcu tekstu. Ustawiona wartość jest dodawana do naturalnej ciszy po ostatnim słowie.
  • Tailing-exact – Wyciszenie na końcu tekstu. Wartość jest bezwzględną długością ciszy.
  • Sentenceboundary – Dodatkowa cisza między sąsiednimi zdaniami. Rzeczywista długość ciszy dla tego typu obejmuje naturalną ciszę po ostatnim słowie w poprzednim zdaniu, wartość ustawioną dla tego typu oraz naturalną ciszę przed wyrazem początkowym w następnym zdaniu.
  • Sentenceboundary-exact – Cisza między sąsiednimi zdaniami. Wartość jest bezwzględną długością ciszy.
  • Comma-exact – Wycisz przecinek w formacie pół szerokości lub pełnej szerokości. Wartość jest bezwzględną długością ciszy.
  • Semicolon-exact – Wyciszenie średnika w formacie pół szerokości lub pełnej szerokości. Wartość jest bezwzględną długością ciszy.
  • Enumerationcomma-exact — Wycisz przecinek wyliczenia w formacie pełnowymiarowym. Wartość jest bezwzględną długością 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-exactlub 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.
  • redlips_front – synchronizacja ust z identyfikatorem viseme i wyjściem przesunięcia dźwięku
  • FacialExpression – mieszanie danych wyjściowych kształtów
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>

Następne kroki