SSML-Dokumentstruktur und -Ereignisse

Die Speech Synthesis Markup Language (SSML) mit Eingabetext bestimmt die Struktur, den Inhalt und andere Merkmale der Sprachsyntheseausgabe. Beispielsweise können Sie mit SSML einen Absatz, einen Satz, eine Unterbrechung bzw. eine Pause oder Stille definieren. Sie können Text mit Ereignistags wie Lesezeichen oder Mundbildern umschließen, die später von Ihrer Anwendung verarbeitet werden können.

Ausführliche Informationen zum Strukturieren von Elementen im SSML-Dokument finden Sie in den folgenden Abschnitten.

Dokumentstruktur

Die Speech-Dienstimplementierung von SSML basiert auf der Markupsprache für Sprachsynthese, Version 1.0 des World Wide Web Consortiums. Die vom Spracherkennungsdienst unterstützten Elemente können sich vom W3C-Standard unterscheiden.

Ein SSML-Dokument wird mit SSML-Elementen (oder Tags) erstellt. Diese Elemente dienen zum Anpassen von u. a. Stimme, Stil, Tonhöhe, Prosodie und Lautstärke.

Es folgt eine Teilmenge der grundlegenden Struktur und Syntax eines SSML-Dokuments:

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

Einige Beispiele für Inhalte, die in jedem Element zulässig sind, werden in der folgenden Liste beschrieben:

  • audio: Der Textkörper des audio-Elements kann Nur-Text oder SSML-Markup enthalten, das verwendet wird, wenn die Audiodatei nicht verfügbar ist oder wiedergegeben werden kann. Das audio-Element kann außerdem Text und die folgenden Elemente enthalten: audio, break, p, s, phoneme, prosody, say-as und sub.
  • bookmark: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • break: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • emphasis: Dieses Element kann Text und die folgenden Elemente enthalten: audio, break, emphasis, lang, phoneme, prosody, say-as und sub.
  • lang: Dieses Element kann alle anderen Elemente mit Ausnahme von mstts:backgroundaudio, voice und speakenthalten.
  • lexicon: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • math: Dieses Element darf nur Text und MathML-Elemente enthalten.
  • mstts:audioduration: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • mstts:backgroundaudio: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • mstts:embedding: Dieses Element kann Text und die folgenden Elemente enthalten: audio, break, emphasis, lang, phoneme, prosody, say-as und sub.
  • mstts:express-as: Dieses Element kann Text und die folgenden Elemente enthalten: audio, break, emphasis, lang, phoneme, prosody, say-as und sub.
  • mstts:silence: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • mstts:viseme: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • p: Dieses Element kann Text und die folgenden Elemente enthalten: audio, break, phoneme, prosody, say-as, sub, mstts:express-as und s.
  • phoneme: Dieses Element darf keinen Text oder andere Elemente enthalten.
  • prosody: Dieses Element kann Text und die folgenden Elemente enthalten: audio, break, p, phoneme, prosody, say-as, sub und s.
  • s: Dieses Element kann Text und die folgenden Elemente enthalten: audio, break, phoneme, prosody, say-as, mstts:express-as und sub.
  • say-as: Dieses Element darf nur Text und keine anderen Elemente enthalten.
  • sub: Dieses Element darf nur Text und keine anderen Elemente enthalten.
  • speak: Das Stammelement eines SSML-Dokuments. Dieses Element kann Text und die folgenden Elemente enthalten: mstts:backgroundaudio und voice.
  • voice: Dieses Element kann alle anderen Elemente mit Ausnahme von mstts:backgroundaudio und speak enthalten.

Der Spracherkennungsdienst handhabt die Zeichensetzung automatisch, z. B. indem nach einem Punkt eine Pause eingehalten oder die richtige Betonung gewählt wird, wenn ein Satz mit einem Fragezeichen endet.

Sonderzeichen

Um die Zeichen &, <und > im Wert oder Text des SSML-Elements verwenden zu können, müssen Sie das Entitätsformat verwenden. Konkret müssen Sie &amp; anstelle von &, &lt; anstelle von < und &gt; anstelle von > verwenden. Andernfalls wird der SSML-Code nicht ordnungsgemäß analysiert.

Geben Sie z. B. green &amp; yellow statt green & yellow an. Der folgende SSML-Code wird wie erwartet analysiert:

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

Sonderzeichen wie Anführungszeichen, Apostrophe und Klammern müssen mit Escapezeichen versehen werden. Weitere Informationen finden Sie unter Extensible Markup Language (XML) 1.0: Anhang D.

Attributwerte müssen in doppelte oder einfache Anführungszeichen gesetzt werden. Beispielsweise sind <prosody volume="90"> und <prosody volume='90'> wohlgeformte, gültige Elemente, während <prosody volume=90> nicht erkannt wird.

Das Stammelement „speak“

Das speak-Element enthält Informationen wie z. B. Version, Sprache und Definition des Markupvokabulars. Das speak-Element ist das Stammelement, das in allen SSML-Dokumenten erforderlich ist. Sie müssen die Standardsprache im speak-Element festlegen, unabhängig davon, ob die Sprache an einer anderen Stelle angepasst wird, z. B. im lang-Element.

Es folgt die Syntax des speak-Elements:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
attribute BESCHREIBUNG Erforderlich oder optional
version Gibt die Version der SSML-Spezifikation an, die zum Interpretieren des Dokumentmarkups verwendet wird. Die aktuelle Version ist 1.0. Erforderlich
xml:lang Die Sprache des Stammdokuments. Der Wert kann einen Sprachcode wie en (Englisch) oder ein Gebietsschema wie en-US (Englisch – USA) enthalten. Erforderlich
xmlns Der URI zum Dokument, in dem das Markupvokabular (Elementtypen und Attributnamen) des SSML-Dokuments definiert wird. Der aktuelle URI ist http://www.w3.org/2001/10/synthesis". Erforderlich

Das speak-Element muss mindestens ein „voice“-Element enthalten.

Beispiele für „speak“

Die unterstützten Werte für Attribute des speak-Elements wurden zuvor beschrieben.

Beispiel mit einer Stimme

In diesem Beispiel wird die Stimme en-US-AvaNeural verwendet. Weitere Beispiele finden Sie unter Stimmbeispiele.

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

Hinzufügen einer Pause

Mit dem break-Element können Sie das Standardverhalten von Unterbrechungen bzw. Pausen zwischen Wörtern außer Kraft setzen. Andernfalls fügt der Speech-Dienst automatisch Pausen ein.

Die Verwendung der Attribute des break-Elements wird in der folgenden Tabelle beschrieben.

attribute BESCHREIBUNG Erforderlich oder optional
strength Die relative Dauer einer Pause mit einem der folgenden Werte:
  • x-weak
  • weak
  • medium (Standard)
  • strong
  • x-strong
Optional
time Die absolute Dauer einer Pause in Sekunden (z. B. 2s) oder Millisekunden (z. B. 500ms). Der gültige Bereich ist 0–5.000 Millisekunden. Wenn Sie einen Wert festlegen, der größer als der unterstützte Höchstwert ist, verwendet der Dienst 5000ms. Wenn das Attribut time festgelegt ist, wird das Attribut strength ignoriert. Optional

Hier sind weitere Details zum strength-Attribut.

Strength Relative Dauer
Extraschwach 250 ms
Schwach 500 ms
Medium 750 ms
STARK (Strong) 1\.000 ms
Extrastark 1.250 ms

Beispiele für Unterbrechungen

Die unterstützten Werte für Attribute des break-Elements wurden zuvor beschrieben. Die folgenden drei Methoden fügen alle Pausen von 750 ms hinzu.

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

Hinzufügen von Stille

Verwenden Sie das mstts:silence-Element, um Pausen vor oder nach Text oder zwischen zwei aufeinander folgenden Sätzen einzufügen.

Einer der Unterschiede zwischen mstts:silence und break ist, dass ein break-Element an einer beliebigen Stelle im Text eingefügt werden kann. „Silence“ (Stille) funktioniert nur am Anfang oder Ende des Eingabetexts oder zwischen zwei aufeinander folgenden Sätzen.

Die Einstellung für Stille gilt für den gesamten Eingabetext innerhalb des umschließenden voice-Elements. Um die Einstellung für Stille zurückzusetzen oder erneut zu ändern, müssen Sie ein neues voice-Element entweder mit derselben oder einer anderen Stimme verwenden.

Die Verwendung der Attribute des mstts:silence-Elements wird in der folgenden Tabelle beschrieben.

attribute BESCHREIBUNG Erforderlich oder optional
type Gibt an, wo und wie Stille hinzugefügt wird. Die folgenden Arten von Stille werden unterstützt:
  • Leading: zusätzliche Stille am Anfang des Texts. Der von Ihnen festgelegte Wert wird der natürlichen Stille vor dem Textanfang hinzugefügt.
  • Leading-exact: Stille am Anfang des Texts. Der Wert gibt die Länge der Stille als absoluten Wert an.
  • Tailing: zusätzliche Stille am Ende des Texts. Der festgelegte Wert wird der natürlichen Stille nach dem letzten Wort hinzugefügt.
  • Tailing-exact: Stille am Ende des Texts. Der Wert gibt die Länge der Stille als absoluten Wert an.
  • Sentenceboundary: zusätzliche Stille zwischen benachbarten Sätzen. Die tatsächliche Länge der Stille für diesen Typ umfasst die natürliche Stille nach dem letzten Wort im vorherigen Satz, den Wert, den Sie für diesen Typ festgelegt haben, und die natürliche Stille vor dem Anfangswort im nächsten Satz.
  • Sentenceboundary-exact: Stille zwischen benachbarten Sätzen. Der Wert gibt die Länge der Stille als absoluten Wert an.
  • Comma-exact: Stille beim Komma in halber oder ganzer Breite. Der Wert gibt die Länge der Stille als absoluten Wert an.
  • Semicolon-exact: Stille beim Semikolon in halber oder ganzer Breite. Der Wert gibt die Länge der Stille als absoluten Wert an.
  • Enumerationcomma-exact – Stille beim Aufzählungskomma in ganzer Breite. Der Wert gibt die Länge der Stille als absoluten Wert an.

Der Typ der absoluten Stille (mit dem Suffix -exact) ersetzt jede ansonsten natürliche führende oder nachfolgende Stille. Typen absoluter Stille haben Vorrang vor dem entsprechenden nicht absoluten Typ. Wenn Sie z. B. sowohl den Typ Leading als auch Leading-exact festlegen, ist der Typ Leading-exact wirksam. Das WordBoundary-Ereignis hat Vorrang vor interpunktionsbezogenen Einstellungen für Stille wie Comma-exact, Semicolon-exactoder Enumerationcomma-exact. Wenn Sie sowohl die Einstellungen für das WordBoundary-Ereignis als auch die interpunktionsbezogenen Einstellungen für Stille aktivieren, sind letztere nicht wirksam.
Erforderlich
Value Die Dauer einer Pause in Sekunden (z. B. 2s) oder Millisekunden (z. B. 500ms). Der gültige Bereich ist 0–5.000 Millisekunden. Wenn Sie einen Wert festlegen, der größer als der unterstützte Höchstwert ist, verwendet der Dienst 5000ms. Erforderlich

Beispiele für mstts:silence

Die unterstützten Werte für Attribute des mstts:silence-Elements wurden zuvor beschrieben.

In diesem Beispiel wird mstts:silence verwendet, um 200 ms Stille zwischen zwei Sätzen hinzuzufügen.

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

In diesem Beispiel wird mstts:silence verwendet, um eine Stille von 50 ms beim Komma, eine Stille von 100 ms beim Semikolon und eine Stille von 150 ms beim Aufzählungskomma hinzuzufügen.

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

Angeben von Absätzen und Sätzen

Die Elemente p und s werden verwendet, um Abschnitte bzw. Sätze zu bezeichnen. Wenn diese Elemente fehlen, ermittelt der Spracherkennungsdienst die Struktur des SSML-Dokuments automatisch.

Beispiele für Absätze und Sätze

Im folgenden Beispiel werden zwei Absätze definiert, die jeweils Sätze enthalten. Im zweiten Absatz bestimmt der Spracherkennungsdienst automatisch die Satzstruktur, da sie im SSML-Dokument nicht definiert ist.

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

Lesezeichen-Element

Sie können das bookmark-Element in SSML verwenden, um auf eine bestimmte Position in der Text- oder Tagsequenz zu verweisen. Anschließend verwenden Sie das Speech SDK und abonnieren das Ereignis BookmarkReached, um das Offset jeder Markierung im Audiodatenstrom abzurufen. Das bookmark-Element wird nicht gesprochen. Weitere Informationen finden Sie unter Abonnieren von Synthesizerereignissen.

Die Verwendung der Attribute des bookmark-Elements wird in der folgenden Tabelle beschrieben.

attribute BESCHREIBUNG Erforderlich oder optional
mark Der Referenztext des bookmark-Elements. Erforderlich

Lesezeichenbeispiele

Die unterstützten Werte für Attribute des bookmark-Elements wurden zuvor beschrieben.

Beispielsweise können Sie den Zeitversatz (Offset) jedes Blumennamens wie im folgenden Codeausschnitt ermitteln:

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

Visemelement

Ein Visem ist die visuelle Beschreibung eines Phonems. Es beschreibt die Position von Gesicht und Mund einer Person beim Sprechen. Sie können das mstts:viseme-Element in SSML verwenden, um die Visemausgabe anzufordern. Weitere Informationen finden Sie unter Abrufen der Gesichtsposition mit Mundbild.

Die Viseme-Einstellung gilt für den gesamten Eingabetext innerhalb des umschließenden voice-Elements. Um die Einstellung für das Mundbild zurückzusetzen oder erneut zu ändern, müssen Sie ein neues voice-Element entweder mit derselben oder einer anderen Stimme verwenden.

Die Verwendung der Attribute des viseme-Elements wird in der folgenden Tabelle beschrieben.

attribute BESCHREIBUNG Erforderlich oder optional
type Der Typ der Mundbildausgabe.
  • redlips_front: Lippensynchron mit Visem-ID und versetzter Audioausgabe
  • FacialExpression: Ausgabe von Überblendformen
Erforderlich

Hinweis

Derzeit unterstützt nur redlips_front neuronale Stimmen im Gebietsschema en-US, und FacialExpression unterstützt neuronale Stimmen in den Gebietsschemas en-US und zh-CN.

Beispiele für Mundbilder

Die unterstützten Werte für Attribute des viseme-Elements wurden zuvor beschrieben.

Dieser SSML-Codeausschnitt veranschaulicht, wie Überblendformen mit ihrer synthetisierten Sprache kombiniert werden.

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

Nächste Schritte