SSML-documentstructuur en -gebeurtenissen
De Speech Synthesis Markup Language (SSML) met invoertekst bepaalt de structuur, inhoud en andere kenmerken van de tekst naar spraakuitvoer. U kunt bijvoorbeeld SSML gebruiken om een alinea, een zin, een pauze of stilte te definiëren. U kunt tekst laten teruglopen met gebeurtenistags, zoals bladwijzer of viseme, die later door uw toepassing kunnen worden verwerkt.
Raadpleeg de onderstaande secties voor meer informatie over het structureeren van elementen in het SSML-document.
Notitie
Naast neurale stemmen van Azure AI Speech (niet-HD) kunt u ook hd-stemmen (Hd) van Azure AI Speech (high definition) en neurale stemmen van Azure OpenAI (HD en niet-HD) gebruiken. De HD-stemmen bieden een hogere kwaliteit voor veelzijdigere scenario's.
Sommige stemmen ondersteunen niet alle SSML-tags (Speech Synthesis Markup Language). Dit omvat neurale tekst naar spraak HD-stemmen, persoonlijke stemmen en ingesloten stemmen.
- Voor HD-stemmen (Azure AI Speech high definition) raadpleegt u hier de SSML-ondersteuning.
- Voor persoonlijke stem vindt u hier de SSML-ondersteuning.
- Raadpleeg hier de SSML-ondersteuning voor ingesloten stemmen.
Documentstructuur
De speech-service-implementatie van SSML is gebaseerd op de Speech Synthesis Markup Language versie 1.0 van het World Wide Web Consortium. De elementen die door speech worden ondersteund, kunnen verschillen van de W3C-standaard.
Elk SSML-document wordt gemaakt met SSML-elementen of -tags. Deze elementen worden gebruikt om de stem, stijl, toonhoogte, prosody, volume en meer aan te passen.
Hier volgt een subset van de basisstructuur en syntaxis van een SSML-document:
<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>
Enkele voorbeelden van inhoud die in elk element zijn toegestaan, worden beschreven in de volgende lijst:
audio
: De hoofdtekst van hetaudio
element kan tekst zonder opmaak of SSML-opmaak bevatten die wordt gesproken als het audiobestand niet beschikbaar of niet kan worden afgespeeld. Hetaudio
element kan ook tekst en de volgende elementen bevatten:audio
,break
,p
,s
,phoneme
,prosody
, , ,say-as
ensub
.bookmark
: dit element mag geen tekst of andere elementen bevatten.break
: dit element mag geen tekst of andere elementen bevatten.emphasis
: Dit element kan tekst en de volgende elementen bevatten:audio
,break
,emphasis
,lang
,phoneme
,prosody
, , ,say-as
ensub
.lang
: dit element kan alle andere elementen bevatten, behalvemstts:backgroundaudio
,voice
enspeak
.lexicon
: dit element mag geen tekst of andere elementen bevatten.math
: Dit element mag alleen tekst- en MathML-elementen bevatten.mstts:audioduration
: dit element mag geen tekst of andere elementen bevatten.mstts:backgroundaudio
: dit element mag geen tekst of andere elementen bevatten.mstts:embedding
: Dit element kan tekst en de volgende elementen bevatten:audio
,break
,emphasis
,lang
,phoneme
,prosody
, , ,say-as
ensub
.mstts:express-as
: Dit element kan tekst en de volgende elementen bevatten:audio
,break
,emphasis
,lang
,phoneme
,prosody
, , ,say-as
ensub
.mstts:silence
: dit element mag geen tekst of andere elementen bevatten.mstts:viseme
: dit element mag geen tekst of andere elementen bevatten.p
: Dit element kan tekst en de volgende elementen bevatten:audio
,break
,phoneme
,prosody
,say-as
,sub
, , ,mstts:express-as
ens
.phoneme
: Dit element mag alleen tekst en geen andere elementen bevatten.prosody
: Dit element kan tekst en de volgende elementen bevatten:audio
,break
,p
,phoneme
,prosody
,say-as
, , ,sub
ens
.s
: Dit element kan tekst en de volgende elementen bevatten:audio
, ,phoneme
break
,prosody
,say-as
, ,mstts:express-as
ensub
.say-as
: Dit element mag alleen tekst en geen andere elementen bevatten.sub
: Dit element mag alleen tekst en geen andere elementen bevatten.speak
: Het hoofdelement van een SSML-document. Dit element kan de volgende elementen bevatten:mstts:backgroundaudio
envoice
.voice
: dit element kan alle andere elementen bevatten, behalvemstts:backgroundaudio
enspeak
.
De Speech-service verwerkt interpunctie automatisch, zoals onderbreken na een punt of het gebruik van de juiste intonatie wanneer een zin eindigt met een vraagteken.
Speciale tekens
Als u de tekens &
<
en >
binnen de waarde of tekst van het SSML-element wilt gebruiken, moet u de entiteitsindeling gebruiken. In het bijzonder moet &
u gebruiken in plaats van &
, gebruik <
in plaats van <
en gebruik >
in plaats van >
. Anders wordt de SSML niet correct geparseerd.
Geef bijvoorbeeld green & yellow
op in plaats van green & yellow
. De volgende SSML wordt geparseerd zoals verwacht:
<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>
Speciale tekens, zoals aanhalingstekens, apostrofs en vierkante haken, moeten worden ontsnapt. Zie Extensible Markup Language (XML) 1.0: Bijlage D voor meer informatie.
Dubbele of enkele aanhalingstekens moeten de kenmerkwaarden insluiten. Dit zijn bijvoorbeeld <prosody volume="90">
<prosody volume='90'>
goed gevormde, geldige elementen, maar <prosody volume=90>
worden niet herkend.
Hoofdelement uitspreken
Het speak
element bevat informatie zoals versie, taal en de definitie van de woordenlijst voor markeringen. Het speak
element is het hoofdelement dat vereist is voor alle SSML-documenten. U moet de standaardtaal in het speak
element opgeven, ongeacht of de taal ergens anders wordt aangepast, zoals binnen het lang
element.
Dit is de syntaxis voor het speak
element:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>
Kenmerk | Beschrijving | Vereist of optioneel |
---|---|---|
version |
Geeft de versie van de SSML-specificatie aan die wordt gebruikt om de documentmarkeringen te interpreteren. De huidige versie is 1.0. | Vereist |
xml:lang |
De taal van het hoofddocument. De waarde kan een taalcode bevatten, zoals en (Engels) of een landinstelling zoals en-US (Engels - Verenigde Staten). |
Vereist |
xmlns |
De URI voor het document waarmee de woordenlijst voor markeringen (de elementtypen en kenmerknamen) van het SSML-document wordt gedefinieerd. De huidige URI is 'http://www.w3.org/2001/10/synthesis". | Vereist |
Het speak
element moet ten minste één spraakelement bevatten.
spreekvoorbeelden
De ondersteunde waarden voor kenmerken van het speak
element zijn eerder beschreven.
Voorbeeld van één stem
In dit voorbeeld wordt de en-US-AvaNeural
stem gebruikt. Zie spraakvoorbeelden voor meer voorbeelden.
<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>
Een onderbreking toevoegen
Gebruik het break
element om het standaardgedrag van onderbrekingen of pauzes tussen woorden te overschrijven. Anders wordt de spraakservice automatisch onderbroken.
Het gebruik van de kenmerken van het break
element wordt beschreven in de volgende tabel.
Kenmerk | Beschrijving | Vereist of optioneel |
---|---|---|
strength |
De relatieve duur van een pauze met behulp van een van de volgende waarden:
|
Optioneel |
time |
De absolute duur van een pauze in seconden (zoals 2s ) of milliseconden (zoals 500ms ). Geldige waarden variëren van 0 tot 20000 milliseconden. Als u een waarde instelt die groter is dan het ondersteunde maximum, gebruikt 20000ms de service . Als het time kenmerk is ingesteld, wordt het strength kenmerk genegeerd. |
Optioneel |
Hier vindt u meer informatie over het strength
kenmerk.
Kracht | Relatieve duur |
---|---|
X-zwak | 250 ms |
Week | 500 ms |
Gemiddeld | 750 ms |
Sterk | 1000 ms |
X-sterk | 1,250 ms |
Voorbeelden van onderbrekingen
De ondersteunde waarden voor kenmerken van het break
element zijn eerder beschreven. De volgende drie manieren voegen allemaal 750 ms-einden toe.
<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>
Stilte toevoegen
Gebruik het mstts:silence
element om pauzes voor of na tekst in te voegen, of tussen twee aangrenzende zinnen.
Een van de verschillen tussen mstts:silence
en break
is dat een break
element overal in de tekst kan worden ingevoegd. Stilte werkt alleen aan het begin of einde van invoertekst of aan de grens van twee aangrenzende zinnen.
De stilte-instelling wordt toegepast op alle invoertekst binnen het bijbehorende element voice
. Als u de stilte-instelling opnieuw wilt instellen of wijzigen, moet u een nieuw voice
element met dezelfde stem of een andere stem gebruiken.
Het gebruik van de kenmerken van het mstts:silence
element wordt beschreven in de volgende tabel.
Kenmerk | Beschrijving | Vereist of optioneel |
---|---|---|
type |
Hiermee geeft u op waar en hoe u stilte toevoegt. De volgende stiltetypen worden ondersteund:
Een absoluut stiltetype (met het -exact achtervoegsel) vervangt alle andere natuurlijke voorloop- of volgde stilte. Absolute stiltetypen hebben voorrang op het bijbehorende niet-absolute type. Als u bijvoorbeeld beide Leading typen Leading-exact instelt, wordt het Leading-exact type van kracht. De WordBoundary-gebeurtenis heeft voorrang op instellingen voor stilte met betrekking tot interpunctie, waaronder Comma-exact , Semicolon-exact of Enumerationcomma-exact . Wanneer u zowel de instellingen voor gebeurtenis WordBoundary - als interpunctiegerelateerde stilte gebruikt, worden de instellingen voor stiltes die betrekking hebben op interpunctie niet van kracht. |
Vereist |
Value |
De duur van een pauze in seconden (zoals 2s ) of milliseconden (zoals 500ms ). Geldige waarden variëren van 0 tot 20000 milliseconden. Als u een waarde instelt die groter is dan het ondersteunde maximum, gebruikt 20000ms de service . |
Vereist |
mstts-stiltevoorbeelden
De ondersteunde waarden voor kenmerken van het mstts:silence
element zijn eerder beschreven.
In dit voorbeeld mstts:silence
wordt gebruikt om 200 ms stilte toe te voegen tussen twee zinnen.
<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 dit voorbeeld mstts:silence
wordt gebruikt om 50 ms stilte toe te voegen aan de komma, 100 ms stilte op de puntkomma en 150 ms stilte bij de opsommingskomma.
<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>
Alinea's en zinnen opgeven
De p
en s
elementen worden gebruikt om respectievelijk alinea's en zinnen aan te geven. Als deze elementen ontbreken, bepaalt de Speech-service automatisch de structuur van het SSML-document.
Voorbeelden van alinea's en zinnen
In het volgende voorbeeld worden twee alinea's gedefinieerd die elk zinnen bevatten. In de tweede alinea bepaalt de Speech-service automatisch de zinstructuur, omdat deze niet zijn gedefinieerd in het SSML-document.
<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>
Bladwijzerelement
U kunt het bookmark
element in SSML gebruiken om te verwijzen naar een specifieke locatie in de tekst- of tagvolgorde. Vervolgens gebruikt u de Speech SDK en abonneert u zich op de BookmarkReached
gebeurtenis om de offset van elke markering in de audiostream op te halen. Het bookmark
element wordt niet gesproken. Zie Abonneren op synthesizer-evenementen voor meer informatie.
Het gebruik van de kenmerken van het bookmark
element wordt beschreven in de volgende tabel.
Kenmerk | Beschrijving | Vereist of optioneel |
---|---|---|
mark |
De verwijzingstekst van het bookmark element. |
Vereist |
Voorbeelden van bladwijzers
De ondersteunde waarden voor kenmerken van het bookmark
element zijn eerder beschreven.
U wilt bijvoorbeeld weten wat de tijdverschil is van elk bloemwoord in het volgende fragment:
<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
Een viseme is de visuele beschrijving van een phoneme in gesproken taal. Het definieert de positie van het gezicht en de mond terwijl een persoon spreekt. U kunt het mstts:viseme
element in SSML gebruiken om viseme-uitvoer aan te vragen. Zie Gezichtspositie ophalen met viseme voor meer informatie.
De instelling voor het viseme wordt toegepast op alle invoertekst in het bijbehorende element voice
. Als u de instelling voor het viseme opnieuw wilt instellen of wijzigen, moet u een nieuw voice
element met dezelfde stem of een andere stem gebruiken.
Het gebruik van de kenmerken van het viseme
element wordt beschreven in de volgende tabel.
Kenmerk | Beschrijving | Vereist of optioneel |
---|---|---|
type |
Het type viseme-uitvoer.
|
Vereist |
Notitie
redlips_front
Momenteel ondersteunt alleen neurale stemmen in en-US
landinstellingen en FacialExpression
ondersteunt neurale stemmen in en-US
en zh-CN
landinstellingen.
Viseme-voorbeelden
De ondersteunde waarden voor kenmerken van het viseme
element zijn eerder beschreven.
Dit SSML-fragment laat zien hoe u shapes kunt aanvragen met uw gesynthetiseerde spraak.
<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>