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.
Hinweis
Zusätzlich zu neuronalen (nicht HD)-Stimmen von Azure KI Speech können Sie auch Azure KI Speech High Definition (HD)-Stimmen und neurale Azure OpenAI-Stimmen (HD- und Nicht-HD)-Stimmen verwenden. Die HD-Stimmen bieten eine höhere Qualität für vielseitigere Szenarien.
Einige Stimmen unterstützen nicht alle SSML-Tags (Speech Synthesis Markup Language). Dazu gehören neuronale Sprachsynthese für HD-Stimmen, persönliche Stimmen und eingebettete Stimmen.
- Überprüfen Sie für HD-Stimmen (High Definition) von Azure KI Speech die SSML-Unterstützung hier.
- Für persönliche Stimme finden Sie die SSML-Unterstützung hier.
- Überprüfen Sie für eingebettete Stimmen die SSML-Unterstützung hier.
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 desaudio
-Elements kann Nur-Text oder SSML-Markup enthalten, das verwendet wird, wenn die Audiodatei nicht verfügbar ist oder wiedergegeben werden kann. Dasaudio
-Element kann außerdem Text und die folgenden Elemente enthalten:audio
,break
,p
,s
,phoneme
,prosody
,say-as
undsub
.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
undsub
.lang
: Dieses Element kann alle anderen Elemente mit Ausnahme vonmstts:backgroundaudio
,voice
undspeak
enthalten.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
undsub
.mstts:express-as
: Dieses Element kann Text und die folgenden Elemente enthalten:audio
,break
,emphasis
,lang
,phoneme
,prosody
,say-as
undsub
.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
unds
.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
unds
.s
: Dieses Element kann Text und die folgenden Elemente enthalten:audio
,break
,phoneme
,prosody
,say-as
,mstts:express-as
undsub
.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
undvoice
.voice
: Dieses Element kann alle anderen Elemente mit Ausnahme vonmstts:backgroundaudio
undspeak
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 &
anstelle von &
, <
anstelle von <
und >
anstelle von >
verwenden. Andernfalls wird der SSML-Code nicht ordnungsgemäß analysiert.
Geben Sie z. B. green & 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 & 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:
|
Optional |
time |
Die absolute Dauer einer Pause in Sekunden (z. B. 2s ) oder Millisekunden (z. B. 500ms ). Der gültige Bereich ist 0–20.000 Millisekunden. Wenn Sie einen Wert festlegen, der größer als der unterstützte Höchstwert ist, verwendet der Dienst 20000ms . 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:
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-exact oder 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–20.000 Millisekunden. Wenn Sie einen Wert festlegen, der größer als der unterstützte Höchstwert ist, verwendet der Dienst 20000ms . |
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.
|
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>