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.

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 het audio element kan tekst zonder opmaak of SSML-opmaak bevatten die wordt gesproken als het audiobestand niet beschikbaar of niet kan worden afgespeeld. Het audio element kan ook tekst en de volgende elementen bevatten: audio, break, p, s, phoneme, prosody, , , say-asen sub.
  • 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-asen sub.
  • lang: dit element kan alle andere elementen bevatten, behalve mstts:backgroundaudio, voiceen speak.
  • 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-asen sub.
  • mstts:express-as: Dit element kan tekst en de volgende elementen bevatten: audio, break, emphasis, lang, phoneme, prosody, , , say-asen sub.
  • 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-asen s.
  • 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, , , suben s.
  • s: Dit element kan tekst en de volgende elementen bevatten: audio, , phonemebreak, prosody, say-as, , mstts:express-asen sub.
  • 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 en voice.
  • voice: dit element kan alle andere elementen bevatten, behalve mstts:backgroundaudio en speak.

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 &amp; u gebruiken in plaats van &, gebruik &lt; in plaats van <en gebruik &gt; in plaats van >. Anders wordt de SSML niet correct geparseerd.

Geef bijvoorbeeld green &amp; 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 &amp; 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:
  • x-zwak
  • Zwakke
  • gemiddeld (standaard)
  • Sterke
  • x-strong
Optioneel
time De absolute duur van een pauze in seconden (zoals 2s) of milliseconden (zoals 500ms). Geldige waarden variëren van 0 tot 5000 milliseconden. Als u een waarde instelt die groter is dan het ondersteunde maximum, gebruikt 5000msde 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:
  • Leading – Extra stilte aan het begin van de tekst. De waarde die u instelt, wordt toegevoegd aan de natuurlijke stilte vóór het begin van de tekst.
  • Leading-exact – Stilte aan het begin van de tekst. De waarde is een absolute stiltelengte.
  • Tailing – Extra stilte aan het einde van de tekst. De waarde die u instelt, wordt na het laatste woord toegevoegd aan de natuurlijke stilte.
  • Tailing-exact – Stilte aan het einde van de tekst. De waarde is een absolute stiltelengte.
  • Sentenceboundary – Extra stilte tussen aangrenzende zinnen. De werkelijke stiltelengte voor dit type omvat de natuurlijke stilte na het laatste woord in de vorige zin, de waarde die u voor dit type hebt ingesteld en de natuurlijke stilte voor het beginwoord in de volgende zin.
  • Sentenceboundary-exact – Stilte tussen aangrenzende zinnen. De waarde is een absolute stiltelengte.
  • Comma-exact – Stilte bij de komma in halve breedte of volledige breedte. De waarde is een absolute stiltelengte.
  • Semicolon-exact – Stilte op de puntkomma in halve breedte of volledige breedte. De waarde is een absolute stiltelengte.
  • Enumerationcomma-exact – Stilte bij de opsommingskomma in volledige breedte. De waarde is een absolute stiltelengte.

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-exactof 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 5000 milliseconden. Als u een waarde instelt die groter is dan het ondersteunde maximum, gebruikt 5000msde 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.
  • redlips_front – lipsynchronisatie met viseme-id en audio offset-uitgang
  • FacialExpression – uitvoer van shapes combineren
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>

Volgende stappen