Für Ihre Anfrage mit der Text-to-Speech API können Sie die Speech Synthesis Markup Language (SSML) nutzen, um die Audio-Antwort benutzerdefiniert anzupassen. So können Sie z. B. Details zu Pausen angeben und Audio-Formatierungen für Akronyme, Daten, Uhrzeiten, Abkürzungen oder zu zensierenden Text festlegen. Weitere Informationen und Codebeispiele finden Sie in der SSML-Anleitung zu Text-to-Speech.
Nachfolgend sehen Sie ein Beispiel für SSML-Markup und den damit durch die Funktion "Text-to-Speech" synthetisierten Text:
<speak> Here are <say-as interpret-as="characters">SSML</say-as> samples. I can pause <break time="3s"/>. I can play a sound <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>. I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>. Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line. Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>. I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>. Finally, I can speak a paragraph with two sentences. <p><s>This is sentence one.</s><s>This is sentence two.</s></p> </speak>
Durch dieses SSML-Dokument wird folgender Text synthetisiert:
Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays]. I can speak in cardinals. Your number is ten. Or I can speak in ordinals. You are tenth in line. Or I can even speak in digits. The digits for ten are one oh. I can also substitute phrases, like the World Wide Web Consortium. Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.
Die Text-to-Speech API unterstützt einen Teil der zur Verfügung stehenden SSML-Tags. Sie werden in diesem Thema beschrieben.
Weitere Informationen zum Erstellen von Audiodaten aus SSML-Eingaben mithilfe von Text-to-Speech finden Sie unter Sprach-Audiodateien erstellen.
Tipps zur Verwendung von SSML
Je nach Implementierung kann es sein, dass Sie Anführungszeichen in der SSML-Nutzlast mit einem Escapezeichen maskieren müssen, die Sie an Text-to-Speech senden. In dem folgenden Beispiel zeigen wir Ihnen, wie die in einem JSON-Objekt enthaltene SSML-Eingabe formatiert wird.
"{ 'input':{ 'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard <break time=\"1s\"/>is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>' }, 'voice':{ 'languageCode':'en-us', 'name':'en-US-Standard-B', 'ssmlGender':'MALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }"
Zeichen reservieren
Vermeiden Sie die Verwendung von SSML-Reservierungszeichen in dem Text, der in Audio umgewandelt werden soll. Wenn Sie ein SSML-Reservierungszeichen verwenden müssen, sollten Sie mithilfe seines Escapecodes verhindern, dass das Zeichen als Code gelesen wird. Die folgende Tabelle enthält reservierte SSML-Zeichen und die zugehörigen Escapecodes.
Zeichen | Escapecode |
---|---|
“ | " |
& | & |
' | ' |
< | < |
> | > |
Stimme auswählen
Sie können die Stimme im Objekt VoiceSelectionParams
festlegen. In der SSML-Anleitung zu Text-to-Speech finden Sie ein Codebeispiel, das die Verwendung des VoiceSelectionParams
-Objekts veranschaulicht.
Mit dem Tag <voice>
können Sie SSML mit mehreren Stimmen lesen. Sie müssen jedoch den Namen VoiceSelectionParams
auf eine kompatible Stimme festlegen:
Angeforderter Stimmtyp | Unterstützter Sprachtyp im <voice>-Tag | ||||
---|---|---|---|---|---|
Neural2 | Studio | Wavenet | Nachrichten | Standard | |
Neural2 | ✔ | ✔ | ✔ | ||
Studio | ✔ | ✔ | ✔ | ||
Wavenet | ✔ | ✔ | ✔ | ||
Standard | ✔ | ✔ | ✔ | ||
Nachrichten | ✔ | ✔ | ✔ |
Unterstützung für SSML-Elemente
In den folgenden Abschnitten werden die SSML-Elemente und -Optionen beschrieben, die auf Ihrer Actions on Google-Plattform verwendet werden können.
<speak>
Das Stammelement der SSML-Antwort.
Weitere Informationen zum Element speak
finden Sie in der W3-Spezifikation.
Beispiel
<speak> my SSML content </speak>
<break>
Ein leeres Element, mit dem Pausen oder andere prosodische Abgrenzungen zwischen Wörtern gesteuert werden. Die Verwendung von <break>
zwischen Tokenpaaren ist optional. Wenn dieses Element nicht zwischen Wörtern eingefügt ist, wird die Pause automatisch basierend auf dem linguistischen Kontext festgestellt.
Weitere Informationen zum Element break
finden Sie in der W3-Spezifikation.
Attribute
Attribut | Beschreibung |
---|---|
time |
Legt die Länge der Pause in Sekunden oder Millisekunden fest, z. B. "3s" oder "250ms". |
strength |
Legt die Stärke der prosodischen Pause mit relativen Werten fest. Gültige Werte sind: "x-weak", "weak", "medium", "strong" und "x-strong". Der Wert "none" gibt an, dass keine prosodische Pause eingefügt werden soll. Sie können damit vom Prozessor generierte prosodische Pausen vermeiden. Die anderen Werte geben eine kontinuierlich nicht abnehmende (konzeptuell zunehmende) Pausenstärke zwischen Tokens an. Stärkere Abgrenzungen werden typischerweise von Pausen begleitet. |
Beispiel
Das folgende Beispiel verdeutlicht, wie Sie mit dem Element <break>
eine Pause zwischen Schritten einfügen:
<speak> Step 1, take a deep breath. <break time="200ms"/> Step 2, exhale. Step 3, take a deep breath again. <break strength="weak"/> Step 4, exhale. </speak>
<say‑as>
Mit diesem Element können Sie Informationen zur Art des im Element enthaltenen Textkonstrukts angeben. Damit lässt sich auch die Detailgenauigkeit für das Rendering des enthaltenen Texts festlegen.
Das Element <say‑as>
hat das erforderliche Attribut interpret-as
, das die Aussprache des Werts bestimmt. Je nach dem Wert in interpret-as
können Sie die optionalen Attribute format
und detail
verwenden.
Beispiele
Das Attribut interpret-as
unterstützt die folgenden Werte:
-
currency
Das folgende Beispiel wird als „42 Dollar und 1 Cent“ gesprochen. Wenn das Attribut „language“ weggelassen wird, wird die aktuelle Sprache verwendet.
<speak> <say-as interpret-as='currency' language='en-US'>$42.01</say-as> </speak>
-
telephone
Informationen hierzu finden Sie in der W3C Working Group Note SSML 1.0 say-as-Attributwerte in der Beschreibung zu
interpret-as='telephone'
.Das folgende Beispiel wird als „one eight zero zero two zero two one two one two“ gesprochen. Wenn das Attribut „google:style“ weggelassen wird, wird die Null als Buchstabe „O“ ausgesprochen.
Das Attribut „google:style='zero-as-zero'“ funktioniert derzeit nur in der Sprache „EN“.
<speak> <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as> </speak>
-
verbatim
oderspell-out
Das folgende Beispiel wird Buchstabe für Buchstabe (auf Englisch) gesprochen:
<speak> <say-as interpret-as="verbatim">abcdefg</say-as> </speak>
-
date
Das Attribut
format
enthält eine Reihe von Zeichencodes für Datumsfelder. Die informat
unterstützten Feldzeichencodes sind {y
,m
,d
} für Jahr, Monat und Tag (des Monats). Wenn die Feldcodes für Jahr, Monat und Tag jeweils einmal angegeben sind, werden 4, 2 und 2 Ziffern erwartet. Wird ein Feldcode wiederholt, entspricht die Anzahl der erwarteten Ziffern der Anzahl der Codewiederholungen. Die Felder im Datumstext können durch Satzzeichen und/oder Leerzeichen getrennt sein.Das Attribut
detail
legt die Aussprache des Datums fest. Fürdetail='1'
ist nur das Tagesfeld und entweder ein Monats- oder ein Jahresfeld erforderlich, wobei es trotzdem möglich ist, alle drei Felder anzugeben. Dies ist der Standard, wenn nicht alle drei Felder angegeben sind. Gesprochen wird es als "The {Ordinaltag} of {Monat}, {Jahr}".Das folgende Beispiel wird als "The tenth of September, nineteen sixty" gesprochen:
<speak> <say-as interpret-as="date" format="yyyymmdd" detail="1"> 1960-09-10 </say-as> </speak>
Das folgende Beispiel wird als "The tenth of September" gesprochen:
<speak> <say-as interpret-as="date" format="dm">10-9</say-as> </speak>
Für
detail='2'
sind die Felder für Tag, Monat und Jahr erforderlich. Das ist der Standard, wenn alle drei Felder angegeben sind. Die gesprochene Form lautet "{Monat} {Ordinaltag}, {Jahr}".Das folgende Beispiel wird als "September tenth, nineteen sixty" gesprochen:
<speak> <say-as interpret-as="date" format="dmy" detail="2"> 10-9-1960 </say-as> </speak>
-
characters
Das folgende Beispiel wird als "C A N" (Englisch) gesprochen:
<speak> <say-as interpret-as="characters">can</say-as> </speak>
-
cardinal
Das folgende Beispiel wird als "Twelve thousand three hundred forty five" (US-Englisch) oder "Twelve thousand three hundred and forty five" (UK-Englisch) gesprochen:
<speak> <say-as interpret-as="cardinal">12345</say-as> </speak>
-
ordinal
Das folgende Beispiel wird als "First" gesprochen:
<speak> <say-as interpret-as="ordinal">1</say-as> </speak>
-
fraction
Das folgende Beispiel wird als "five and a half" gesprochen:
<speak> <say-as interpret-as="fraction">5+1/2</say-as> </speak>
-
expletive
oderbleep
Im folgenden Beispiel wird ein Signalton ausgegeben wie bei einer Zensierung:
<speak> <say-as interpret-as="expletive">censor this</say-as> </speak>
-
unit
Passt Einheiten an die Zahl an, wenn zwischen Singular oder Plural unterschieden wird. Das folgende Beispiel wird als "10 feet" gesprochen:
<speak> <say-as interpret-as="unit">10 foot</say-as> </speak>
-
time
Das folgende Beispiel wird als "Two thirty P.M." gesprochen:
<speak> <say-as interpret-as="time" format="hms12">2:30pm</say-as> </speak>
Das Attribut
format
enthält eine Reihe von Zeichencodes für Uhrzeitfelder. Die informat
unterstützten Feldzeichencodes sind {h
,m
,s
,Z
,12
,24
} für Stunde, Minute (der Stunde), Sekunde (der Minute), Zeitzone und 12- oder 24-Stunden-Format. Wenn die Feldcodes für Stunde, Minute und Sekunde jeweils einmal angegeben sind, werden 1, 2 und 2 Ziffern erwartet. Wird ein Feldcode wiederholt, entspricht die Anzahl der erwarteten Ziffern der Anzahl der Codewiederholungen. Die Felder im Uhrzeittext können durch Satzzeichen und/oder Leerzeichen getrennt sein. Wenn im Format keine Stunde, Minute oder Sekunde angegeben ist oder keine übereinstimmenden Ziffern vorhanden sind, wird das Feld als Nullwert behandelt. Der Standardwert fürformat
lautet "hms12".Mit dem Attribut
detail
steuern Sie, ob die Uhrzeit im 12- oder 24-Stunden-Format gesprochen wird. Bei Angabe vondetail='1'
oder wenn beim 24-Stunden-Formatdetail
weggelassen wird, wird das 24-Stunden-Format gesprochen. Bei Angabe vondetail='2'
oder wenn beim 12-Stunden-Formatdetail
weggelassen wird, wird das 12-Stunden-Format gesprochen.
Weitere Informationen zum Element say-as
finden Sie in der W3-Spezifikation.
<audio>
Unterstützt das Einfügen aufgezeichneter Audiodateien und anderer Audioformate in Verbindung mit synthetisierter Sprachausgabe.
Attribute
Attribut | Erforderlich | Standardeinstellung | Werte |
---|---|---|---|
src |
Ja | – | URI der Audiomedienquelle. Als Protokoll wird https unterstützt. |
clipBegin |
Nein | 0 | Eine Zeitangabe, die für den Start der Wiedergabe den Versatz ab dem Start der Audioquelle festlegt. Wenn dieser Wert größer oder gleich der tatsächlichen Dauer der Audioquelle ist, wird kein Audio eingefügt. |
clipEnd |
Nein | Unendlich | Eine Zeitangabe, die für das Ende der Wiedergabe den Versatz ab dem Start der Audioquelle festlegt. Wenn die tatsächliche Dauer der Audioquelle unter diesem Wert liegt, endet die Wiedergabe zu diesem Zeitpunkt. Wenn clipBegin größer oder gleich clipEnd ist, wird kein Audio eingefügt. |
speed |
Nein | 100 % | Das Verhältnis zwischen Wiedergabegeschwindigkeit der Ausgabe und normaler Eingabegeschwindigkeit als Prozentwert. Das Format ist eine positive reelle Zahl gefolgt von "%". Aktuell wird der Bereich [50% (langsam – halbe Geschwindigkeit), 200% (schnell – doppelte Geschwindigkeit)] unterstützt. Wenn Werte außerhalb dieses Bereichs angegeben werden, kann es eventuell sein, dass sie zu Werten innerhalb des Bereichs abgeändert werden. |
repeatCount |
Nein | 1; oder wenn repeatDur festgelegt ist: 10 |
Eine reelle Zahl, die angibt, wie oft die Audioinhalte eingefügt werden, gegebenenfalls nach Zuschneiden mit clipBegin und/oder clipEnd . Teilwiederholungen werden nicht unterstützt, weshalb der Wert auf die nächste Ganzzahl gerundet wird. Null ist kein gültiger Wert und wird daher als nicht angegeben behandelt. Stattdessen wird dann der Standardwert verwendet. |
repeatDur |
Nein | Unendlich | Eine Zeitangabe, die als Begrenzung der Dauer der eingefügten Audiowiedergabe dient, nachdem die Attribute clipBegin , clipEnd , repeatCount und speed auf die Quelle angewendet wurden (anstelle der normalen Wiedergabedauer). Wenn die Dauer der bearbeiteten Audiowiedergabe unter diesem Wert liegt, endet die Wiedergabe zu diesem Zeitpunkt. |
soundLevel |
Nein | +0dB | Hiermit passen Sie die Lautstärke der Audiowiedergabe an. soundLevel gibt den Wert in Dezibel an. Der maximale Bereich ist +/-40dB, wobei der tatsächliche Bereich geringer sein kann. Auch die Ausgabequalität kann innerhalb des Bereichs schwanken. |
Die folgenden Einstellungen werden derzeit für die Audiowiedergabe unterstützt:
- Format: MP3 (MPEG v2)
- 24.000 Samples pro Sekunde
- 24.000~96.000 Bit pro Sekunde, feste Abtastrate
- Format: Opus in Ogg
- 24.000 Samples pro Sekunde (Super-Breitband)
- 24.000–96.000 Bit pro Sekunde, feste Abtastrate
- Format (verworfen): WAV (RIFF)
- PCM 16-Bit mit Vorzeichen, Little Endian
- 24.000 Samples pro Sekunde
- Alle Formate:
- Einzelner Kanal bevorzugt, Stereo aber akzeptabel
- Maximale Dauer: 240 Sekunden, für längere Audiowiedergaben gegebenenfalls Medienantworten implementieren
- Maximale Dateigröße: 5 MB
- Quell-URL muss HTTPS-Protokoll verwenden
- Unser User-Agent beim Abrufen der Audiowiedergabe: "Google-Speech-Actions"
Der Inhalt des Elements <audio>
ist optional und wird verwendet, wenn die Audiodatei nicht wiedergegeben werden kann, oder das Ausgabegerät kein Audio unterstützt. Wenn im Inhalt das Element <desc>
vorkommt, wird für die Anzeige der Textinhalt dieses Elements verwendet. Weitere Informationen finden Sie in der Checkliste für Antworten im Abschnitt über aufgezeichnete Audioinhalte.
Die URL src
muss ebenfalls eine HTTPS-URL sein. In Google Cloud Storage können Ihre Audiodateien unter einer HTTPS-URL gehostet werden.
Weitere Informationen zu Medienantworten finden Sie im Leitfaden für Antworten im Abschnitt zu Medienantworten.
Weitere Informationen zum Element audio
finden Sie in der W3-Spezifikation.
Beispiel
<speak> <audio src="cat_purr_close.ogg"> <desc>a cat purring</desc> PURR (sound didn't load) </audio> </speak>
<p>,<s>
Satz- und Absatzelemente.
Weitere Informationen zu den Elementen p
und s
finden Sie in der W3-Spezifikation.
Beispiel
<p><s>This is sentence one.</s><s>This is sentence two.</s></p>
Best Practices
- Verwenden Sie <s>...</s>-Tags, um ganze Sätze einzuschließen. Das gilt vor allem, wenn sie SSML-Elemente enthalten, welche die Prosodie ändern, also <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq> und <sub>.
- Wenn eine Sprachunterbrechung so lang sein soll, dass Sie diese hören können, verwenden Sie <s>...</s>-Tags und fügen Sie die entsprechende Pause zwischen den Sätzen ein.
<sub>
Gibt an, dass der enthaltene Text bei Aussprache durch den Text im Attributwert "alias" ersetzt wird.
Sie können mit dem Element sub
auch eine vereinfachte Aussprache eines schwer lesbaren Worts angeben. Im letzten Beispiel unten wird das anhand eines japanischen Texts gezeigt:
Weitere Informationen zum Element sub
finden Sie in der W3-Spezifikation.
Beispiele
<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="にっぽんばし">日本橋</sub>
<mark>
Ein leeres Element, das eine Markierung in die Text- oder Tag-Sequenz einfügt. Die Markierung kann dazu verwendet werden, auf eine bestimmte Position in der Sequenz zu verweisen oder eine Markierung für asynchrone Benachrichtigungen in einen Ausgabestream einzufügen.
Weitere Informationen zum Element mark
finden Sie in der W3-Spezifikation.
Beispiel
<speak> Go from <mark name="here"/> here, to <mark name="there"/> there! </speak>
<prosody>
Hiermit werden die Tonhöhe, die Sprechgeschwindigkeit und die Lautstärke für den Text im Element angepasst. Unterstützt werden derzeit die Attribute rate
, pitch
und volume
.
Die Attribute rate
und volume
können gemäß den W3-Spezifikationen festgelegt werden. Den Wert des Attributs pitch
können Sie auf drei Arten angeben:
Attribut | Beschreibung |
---|---|
name |
Die String-ID für jede Markierung. |
Option | Beschreibung |
---|---|
Relativ | Geben Sie einen relativen Wert an (z. B. "low", "medium", "high" usw.), wobei "medium" die Standardtonhöhe ist. |
Halbtöne | Erhöhen oder verringern Sie die Tonhöhe um "N" Halbtöne mit "+Nst" oder "-Nst". Die Angabe von "+/-" und "st" ist erforderlich. |
Prozentsatz | Erhöhen oder verringern Sie die Tonhöhe um "N" Prozent mit "+N%" oder "-N%". Die Angabe von "%" ist erforderlich, "+/-" ist optional. |
Weitere Informationen zum Element prosody
finden Sie in der W3-Spezifikation.
Beispiel
Im folgenden Beispiel wird mit dem Element <prosody>
die Sprechgeschwindigkeit verlangsamt und die Sprache zwei Halbtöne tiefer als normal ausgegeben:
<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
<emphasis>
Hiermit wird der Text des Elements betont oder die Betonung entfernt. Mit dem Element <emphasis>
ändern Sie die Sprache ähnlich wie mit <prosody>
, ohne jedoch einzelne Sprachattribute festlegen zu müssen.
Dieses Element unterstützt das optionale Attribut "level" mit den folgenden gültigen Werten:
strong
moderate
none
reduced
Weitere Informationen zum Element emphasis
finden Sie in der W3-Spezifikation.
Beispiel
Im folgenden Beispiel wird der Text durch das Element <emphasis>
als Ankündigung gesprochen:
<emphasis level="moderate">This is an important announcement</emphasis>
<par>
Ein paralleler Mediencontainer, mit dem Sie mehrere Medienelemente gleichzeitig wiedergeben können. Als Inhalt sind nur ein oder mehrere der Elemente <par>
, <seq>
und <media>
zulässig. Elemente vom Typ <media>
können in beliebiger Reihenfolge angeordnet sein.
Sofern nicht durch ein untergeordnetes Element eine andere Startzeit angegeben wird, entspricht die implizite Startzeit des Elements der Startzeit des Containers <par>
. Wenn für das Attribut begin oder end eines untergeordneten Elements ein Versatzwert angegeben ist, wird der Start des Elements relativ zur Startzeit des Containers <par>
verschoben. Das Attribut "begin" des Stammelements <par>
wird ignoriert. Der Start erfolgt mit Beginn der Ausgabe des SSML-Sprachsyntheseprozesses für das Stammelement <par>
, d. h. effektiv zum Zeitpunkt "null".
Beispiel
<speak> <par> <media xml:id="question" begin="0.5s"> <speak>Who invented the Internet?</speak> </media> <media xml:id="answer" begin="question.end+2.0s"> <speak>The Internet was invented by cats.</speak> </media> <media begin="answer.end-0.2s" soundLevel="-6dB"> <audio src="https://actions.google.com/.../cartoon_boing.ogg"/> </media> <media repeatCount="3" soundLevel="+2.28dB" fadeInDur="2s" fadeOutDur="0.2s"> <audio src="https://actions.google.com/.../cat_purr_close.ogg"/> </media> </par> </speak>
<seq>
Ein sequenzieller Mediencontainer, mit dem Sie Medienelemente nacheinander wiedergeben können. Als Inhalt sind nur ein oder mehrere der Elemente <seq>
, <par>
und <media>
zulässig. Die Medienelemente werden in der Rendering-Reihenfolge angegeben.
Für die Attribute begin und end untergeordneter Elemente können Versatzwerte festgelegt werden. Weitere Informationen erhalten Sie nachfolgend unter Zeitangabe. Die Versatzwerte dieser untergeordneten Elemente gelten relativ zum Ende des vorherigen Elements in der Sequenz oder relativ zum Beginn des Containers <seq>
, wenn es sich um das erste Element handelt.
Beispiel
<speak> <seq> <media begin="0.5s"> <speak>Who invented the Internet?</speak> </media> <media begin="2.0s"> <speak>The Internet was invented by cats.</speak> </media> <media soundLevel="-6dB"> <audio src="https://actions.google.com/.../cartoon_boing.ogg"/> </media> <media repeatCount="3" soundLevel="+2.28dB" fadeInDur="2s" fadeOutDur="0.2s"> <audio src="https://actions.google.com/.../cat_purr_close.ogg"/> </media> </seq> </speak>
<media>
Steht für eine Medienebene innerhalb des Elements <par>
oder <seq>
. Als Inhalt für das Element <media>
ist ein SSML-Element <speak>
oder <audio>
zulässig. In der folgenden Tabelle werden die für das Element <media>
gültigen Attribute beschrieben.
Attribute
Attribut | Erforderlich | Standardeinstellung | Werte |
---|---|---|---|
xml:id | Nein | – | Eine eindeutige XML-Kennzeichnung für dieses Element. Codierte Entitäten werden nicht unterstützt. Die erlaubten Kennzeichnungswerte entsprechen dem regulären Ausdruck "([-_#]|\p{L}|\p{D})+" . Weitere Informationen finden Sie in der Referenz zu "xml:id". |
begin | Nein | 0 | Die Startzeit des Mediencontainers. Wird ignoriert, wenn dies das Stammelement des Mediencontainers ist, das wie der Standardwert "0" behandelt wird. Gültige Stringwerte sind unten im Abschnitt Zeitangabe aufgeführt. |
end | Nein | – | Die Endzeit des Mediencontainers. Gültige Stringwerte sind unten im Abschnitt Zeitangabe aufgeführt. |
repeatCount | Nein | 1 | Eine reelle Zahl, die angibt, wie oft das Medium eingefügt wird. Teilwiederholungen werden nicht unterstützt, weshalb der Wert auf die nächste Ganzzahl gerundet wird. Null ist kein gültiger Wert und wird daher als nicht angegeben behandelt. Stattdessen wird dann der Standardwert verwendet. |
repeatDur | Nein | – | Eine Zeitangabe, welche die Dauer des eingefügten Mediums begrenzt. Wenn die Dauer des Mediums unter diesem Wert liegt, endet die Wiedergabe zu diesem Zeitpunkt. |
soundLevel | Nein | +0dB | Hiermit passen Sie die Lautstärke der Audiowiedergabe an. soundLevel gibt den Wert in Dezibel an. Der maximale Bereich ist +/-40dB, wobei der tatsächliche Bereich geringer sein kann. Auch die Ausgabequalität kann innerhalb des Bereichs schwanken. |
fadeInDur | Nein | 0 Sek. | Eine Zeitangabe für das Einblenden des Mediums von lautlos bis zum optional angegebenen soundLevel . Wenn die Dauer des Mediums unter diesem Wert liegt, stoppt das Einblenden am Ende der Wiedergabe und der Ton erreicht nicht die angegebene Lautstärke. |
fadeOutDur | Nein | 0 Sek. | Eine Zeitangabe für das Ausblenden des Mediums vom optional angegebenen soundLevel bis zu lautlos. Wenn die Dauer des Mediums unter diesem Wert liegt, wird die Lautstärke auf einen niedrigeren Wert gesetzt, um sicherzustellen, dass die Stummschaltung am Ende der Wiedergabe erreicht wird. |
Zeitangabe
Eine Zeitangabe, die für die Attributwerte "begin" und "end" des Elements <media>
und der Mediencontainer (Elemente <par>
und <seq>
) verwendet wird, ist entweder ein Versatzwert (z. B. +2.5s
) oder ein Syncbase-Wert (z. B. foo_id.end-250ms
).
- Versatzwert: Der Zeitversatzwert ist ein SMIL-Timecount-Wert. Zulässige Werte müssen dem folgenden regulären Ausdruck entsprechen:
"\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"
Der erste Ziffernstring ist der ganze Teil der Dezimalzahl und der zweite Ziffernstring der Dezimalbruchteil. Das Standardvorzeichen (d. h. "(+|-)?") ist "+". Die Einheitenwerte entsprechen Stunden, Minuten, Sekunden bzw. Millisekunden. Der Standardwert für die Einheiten ist "s" (Sekunden).
- Syncbase-Wert: Ein Syncbase-Wert ist ein SMIL-Syncbase-Wert. Zulässige Werte müssen dem folgenden regulären Ausdruck entsprechen:
"([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"
Die Ziffern und Einheiten werden so wie Versatzwerte interpretiert.
<phoneme>
Sie können das Tag <phoneme>
verwenden, um benutzerdefinierte Aussprache von Wörtern inline zu erzeugen. Text-to-Speech akzeptiert die phonetischen Alphabete für IPA und X-SAMPA. Eine Liste der unterstützten Sprachen und Phoneme finden Sie auf der Seite "Phoneme".
Jede Anwendung des Tags <phoneme>
leitet die Aussprache eines einzelnen Worts weiter:
<phoneme alphabet="ipa" ph="ˌmænɪˈtoʊbə">manitoba</phoneme> <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>
Betonungsmarkierungen
Es gibt bis zu drei Betonungsstufen, die in eine Transkription eingebunden werden können:
- Primäre Betonung: Diese werden mit /ˈ/ in IPA und /"/ in X-SAMPA gekennzeichnet.
- Sekundäre Betonung: Diese werden mit /ˌ/ in IPA und /%/ in X-SAMPA gekennzeichnet.
- Ohne Betonung: Wird nicht mit einem Symbol (in einer der beiden Notationen) gekennzeichnet.
Einige Sprachen haben möglicherweise weniger als drei Ebenen oder kennzeichnen überhaupt keine Betonungsplatzierung. Auf der Seite "Phoneme" finden Sie die für Ihre Sprache verfügbaren Betonungsstufen. Betonungsmarkierungen werden am Anfang jeder betonten Silbe platziert. Zum Beispiel im amerikanischen Englisch:
Beispielwort | IPA | X-SAMPA |
---|---|---|
water | ˈwɑːtɚ | "wA:t@` |
underwater | ˌʌndɚˈwɑːtɚ | %Vnd@"wA:t@ |
Weitgehend passende und verfeinerte Transkriptionen im Vergleich
In der Regel sollten die Transkriptionen eher breit und phonemisch gehalten werden. Im amerikanischen Englisch zum Beispiel transkribieren Sie das intervokalische /t/ (anstatt einen Tap zu verwenden):
Beispielwort | IPA | X-SAMPA |
---|---|---|
Butter | ˈbʌtɚ anstelle von ˈbʌɾɚ | "bVt@` anstelle von "bV4@` |
Es gibt einige Fälle, in denen die Verwendung der phonemischen Darstellung dazu führt, dass Ihre TTS-Ergebnisse unnatürlich klingen (z. B. wenn die Phonemfolge anatomisch schwer auszusprechen ist).
Ein Beispiel dafür ist die Stimmanpassung für /s/ im Englischen. In diesem Fall sollte sich die Anpassung in der Transkription widerspiegeln:
Beispielwort | IPA | X-SAMPA |
---|---|---|
cats | ˈkæts | "k{ts |
dogs | ˈdɑːgz anstelle von ˈdɑːgs | "dA:gz anstelle von "dA:gs |
Reduzierung
Jede Silbe muss einen (und nur einen) Vokal enthalten. Das bedeutet, dass Sie syllabische Konsonanten vermeiden und sie stattdessen mit einem reduzierten Vokal transkribieren sollten. Beispiel:
Beispielwort | IPA | X-SAMPA |
---|---|---|
kitten | ˈkɪtən anstelle von ˈkɪtn | "kIt@n anstelle von "kitn |
kettle | ˈkɛtəl anstelle von ˈkɛtl | "kEt@l anstelle von "kEtl |
Auszug
Sie können optional mit /./ Silbengrenzen angeben. Jede Silbe muss einen (und nur einen) Vokal enthalten. Beispiel:
Beispielwort | IPA | X-SAMPA |
---|---|---|
readability | ˌɹiː.də.ˈbɪ.lə.tiː | %r\i:.d@."bI.l@.ti: |
Benutzerdefiniertes Aussprachewörterbuch
Alternativ zur Angabe von Aussprachen inline mit dem phoneme
-Tag können Sie ein Wörterbuch mit benutzerdefinierten Aussprachen im Sprachsynthese-RPC angeben. Wenn das benutzerdefinierte Aussprachewörterbuch in der Anfrage enthalten ist, wird der Eingabetext automatisch mit dem SSML-Tag phoneme
transformiert.
Als Beispiel wird die folgende Anfrage mit Texteingabe und benutzerdefinierter Aussprache umgewandelt und entspricht der unten stehenden SSML-Datei.
Ursprüngliche Eingabe:
input: { text: 'Hello world! It is indeed a beautiful world!', custom_pronunciations: { pronunciations: { phrase: 'world' phonetic_encoding: PHONETIC_ENCODING_IPA pronunciation: 'wɜːld' } } }
Transformierte Eingabe:
input: { ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wɜːld">world</phoneme>!</speak>' }
Dauer
Text-to-Speech unterstützt <say-as interpret-as="duration">
, um Zeitangaben korrekt zu erkennen. Das folgende Beispiel wird als "fünf Stunden und dreißig Minuten" ausgesprochen:
<say-as interpret-as="duration" format="h:m">5:30</say-as>
Der Formatstring unterstützt die folgenden Werte:
Abkürzung | Wert |
---|---|
Std. | Stunden |
m | Minuten |
s | Sekunden |
ms | Millisekunden |
<voice>
Mit dem Tag <voice>
können Sie mehr als eine Stimme in einer einzelnen SSML-Anfrage verwenden. Im folgenden Beispiel ist die Standardstimme eine englische Männerstimme.
Alle Wörter werden in dieser Stimme synthetisiert, mit Ausnahme von "qu'est-ce qui t'amène ici", das auf Französisch mit einer weiblichen Stimme anstelle der Standardsprache (Englisch) und des Standardgeschlechts (männlich) verbalisiert wird.
<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui t'amène ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>
Alternativ können Sie auch den Tag <voice>
verwenden, um eine einzelne Stimme (den Namen der Stimme auf der Seite für unterstützte Stimmen) anzugeben, anstatt eine language
und/oder ein gender
zu spezifizieren:
<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est mignon</voice><break time="250ms"/> said a pet shop owner</speak>
Wenn Sie den Tag <voice>
verwenden, erwartet Text-to-Speech entweder einen name
(den Namen der zu verwendenden Stimme) oder eine Kombination der folgenden Attribute. Alle drei Attribute sind optional, aber Sie müssen mindestens eines angeben, wenn Sie keinen name
angeben.
gender
: Entweder "male", "female" oder "neutral".variant
: Wird als Tiebreaker verwendet, wenn es basierend auf Ihrer Konfiguration mehrere Möglichkeiten gibt, welche Stimme zu verwenden ist.language
: Die gewünschte Sprache. In einem bestimmten<voice>
-Tag kann nur eine Sprache angegeben werden. Geben Sie Ihre Sprache im BCP-47-Format an. Sie finden den BCP-47-Code für Ihre Sprache in der Spalte Sprachcode auf der Seite Unterstützte Stimmen und Sprachen.
Sie können auch die relative Priorität der einzelnen Attribute gender
, variant
und language
steuern. Verwenden Sie dazu zwei zusätzliche Tags: required
und ordering
.
required
: Wenn ein Attribut alsrequired
gekennzeichnet und nicht ordnungsgemäß konfiguriert ist, schlägt die Anfrage fehl.ordering
: Alle Attribute, die nach einemordering
-Tag aufgeführt werden, werden als bevorzugte Attribute und nicht als erforderlich betrachtet. Die Text-to-Speech API berücksichtigt bevorzugte Attribute auf Best-Effort-Basis in der Reihenfolge, in der sie nach dem Tagordering
aufgeführt sind. Wenn bevorzugte Attribute falsch konfiguriert sind, gibt Text-to-Speech möglicherweise eine gültige Stimme zurück, jedoch mit der falschen Konfiguration.
Beispiele für Konfigurationen mit den Tags required
und ordering
:
<speak>And there it was <voice language="en-GB" gender="male" required="gender" ordering="gender language">a flying bird </voice>roaring in the skies for the first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female" ordering="language gender">Sunday Funday.</voice></speak>
<lang>
Sie können <lang>
verwenden, um Text in mehreren Sprachen in dieselbe SSML-Anfrage aufzunehmen. Alle Sprachen werden in derselben Stimme synthetisiert, sofern Sie die Stimme nicht mit dem Tag <voice>
explizit ändern. Der String xml:lang
muss die Zielsprache im BCP-47-Format enthalten. Dieser Wert wird in der Tabelle Unterstützte Stimmen als "Sprachcode" aufgeführt. Im folgenden Beispiel wird "chat" in Französisch statt in der Standardsprache (Englisch) verbalisiert:
<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>
Text-to-Speech unterstützt das Tag <lang>
auf Best-Effort-Basis. Nicht alle Sprachkombinationen liefern die gleichen Qualitätsergebnisse, wenn sie in derselben SSML-Anfrage angegeben wurden. In manchen Fällen kann eine Sprachkombination einen Effekt haben, der zwar nachweisbar, aber subtil ist oder als negativ empfunden wird. Bekannte Probleme:
- Japanisch mit Kanji-Zeichen wird vom Tag
<lang>
nicht unterstützt. Die Eingabe wird transliteriert und als chinesische Zeichen gelesen. - Semitische Sprachen wie Arabisch, Hebräisch und Persisch werden vom Tag
<lang>
nicht unterstützt und es gibt keine Sprachwiedergabe. Wenn Sie eine dieser Sprachen verwenden möchten, empfehlen wir Ihnen, das Tag<voice>
zu verwenden, um zu einer Stimme zu wechseln, die Ihre gewünschte Sprache spricht (sofern verfügbar).
SSML-Zeitpunkte
Die Text-to-Speech API unterstützt die Verwendung von Zeitpunkten in den erstellten Audiodaten. Ein Zeitpunkt ist ein Zeitstempel (in Sekunden, gemessen ab dem Beginn des generierten Audios), der einem bestimmten Punkt im Skript entspricht. Mit dem Tag <mark>
können Sie einen Zeitpunkt in Ihrem Skript festlegen. Wenn die Audiodaten generiert werden, gibt die API den Zeitversatz zwischen dem Beginn des Audiosignals und dem Zeitpunkt zurück.
Das Festlegen eines Zeitpunkts erfolgt in zwei Schritten:
- Fügen Sie dem Punkt im Skript, für den Sie einen Zeitstempel benötigen, ein
<mark>
-SSML-Tag hinzu. - Setzen Sie TimepointType auf
SSML_MARK
. Wenn dieses Feld nicht festgelegt ist, werden standardmäßig keine Zeitstempel zurückgegeben.
Im folgenden Beispiel werden zwei Zeitpunkte zurückgegeben:
- timepoint_1: Gibt die Zeit in Sekunden an, zu der das Wort "Mark" im erzeugten Audioinhalt auftaucht.
- timepoint_2: Gibt die Zeit in Sekunden an, zu der das Wort "see" im generierten Audioinhalt auftaucht.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark name="timepoint_2"/> see you.</speak>
Stile
Die folgenden Stimmen können in mehreren Stilen sprechen:- en-US-Neural2-F
- en-US-Neural2-J
Mit dem <google:style>
-Tag können Sie den zu verwendenden Stil festlegen. Verwenden Sie das Tag nur für vollständige Sätze.
Beispiel:
<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>
Das Feld name
unterstützt die folgenden Werte:
apologetic
calm
empathetic
firm
lively