HTTP-Schnittstelle

Um mit der HTTP-REST-Schnittstelle des IBM Watson® Text to Speech-Service synthetisch Sprache aus Text zu erstellen, rufen Sie die Methode GET oder POST /v1/synthesize auf. Sie geben den Text an, aus dem synthetisch Sprache erstellt werden soll, sowie die Stimme und das Format für die gesprochene Audioausgabe. Sie können auch ein angepasstes Modell angeben, das für die Anforderung verwendet werden soll.

Weitere Informationen zur HTTP-Schnittstelle finden Sie in der API- und SDK-Referenz.

Audioausgabe synthetisch aus Text erstellen

Um aus Text synthetisch eine Audioausgabe zu erstellen, rufen Sie eine der beiden Versionen für die Methode /v1/synthesize des Service auf:

  • Die Methode GET /v1/synthesize akzeptiert den Text, aus dem synthetisch Audioausgabe erstellt werden soll, als erforderlichen Abfrageparameter text. Die maximale Größe der Anforderung beträgt 8 KB, was den Eingabetext, den gegebenenfalls angegebenen SSML-Code sowie die URL und Header umfasst.
  • Die Methode POST /v1/synthesize akzeptiert den Text, aus dem synthetisch Audioausgabe erstellt werden soll, als JSON-Konstrukt im erforderlichen Hauptteil der Anforderung. Die maximale Größe der Anforderung beträgt 8 KB für die URL und Header und 5 KB für den Eingabetext, der im Hauptteil der Anforderung gesendet wird. Die Begrenzung von 5 KB bezieht jeden gegebenenfalls angegebenen SSML-Code ein.

Bei den beiden Versionen der Methode /v1/synthesize werden die folgenden Parameter einheitlich verwendet:

accept (Abfrageparameter, optionale Zeichenfolge)

Gibt das angeforderte Audioformat oder den MIME-Typ an, in dem der Service die Audiodaten zurückgeben soll. Diesen Wert können Sie auch im HTTP-Anforderungsheader Accept angeben. Codieren Sie das Argument für den Abfrageparameter accept als URL. Standardmäßig gibt der Dienst den Ton im Format audio/ogg;codecs=opus zurück. Weitere Informationen finden Sie unter Audioformate verwenden.

Das Ogg-Audioformat wird vom Safari-Browser nicht unterstützt. Wenn Sie den Dienst Text to Speech mit dem Safari-Browser verwenden, müssen Sie ein anderes Format angeben, in dem der Dienst das Audio zurückgeben soll.

voice (Abfrageparameter, optionale Zeichenfolge)

Gibt die Stimme an, von der der Text in der Audioausgabe gesprochen werden soll. Mit der Methode /v1/voices können Sie die aktuelle Liste der unterstützten Stimmen abrufen. Lassen Sie den Parameter aus, wenn die Standardstimme verwendet werden soll. Weitere Informationen finden Sie unter Sprachen und Stimmen und Verwenden der Standardstimme.

customization_id (Abfrageparameter, optionale Zeichenfolge)

Gibt eine global eindeutige ID (GUID) für ein angepasstes Modell an, das für die Synthese verwendet werden soll. Ein angegebenes angepasstes Modell muss mit der Sprache der Stimme übereinstimmen, die für die Synthese verwendet wird. Wenn Sie eine Anpassungs-ID angeben, müssen Sie die Anforderung mit den Berechtigungsnachweisen für die Instanz des Service ausführen, der Eigner des angepassten Modells ist. Lassen Sie den Parameter weg, um die angegebene Stimme ohne Anpassung zu verwenden. Weitere Informationen enthält der Abschnitt Wissenswertes über die Anpassung.

rate_percentage (query parameter, optional integer)

Gibt die globale Sprechgeschwindigkeit für die gesamte Syntheseanforderung an. Die Sprechgeschwindigkeit ist die Geschwindigkeit, mit der der Dienst den Text spricht, den er in Sprache umwandelt. Eine höhere Rate bewirkt, dass der Text schneller gesprochen wird, eine niedrigere Rate, dass der Text langsamer gesprochen wird. Der Parameter ändert die Standardrate pro Stimme für eine gesamte Anfrage. Weitere Informationen finden Sie unter Ändern der Sprechgeschwindigkeit.

pitch_percentage (query parameter, optional integer)

Gibt die globale Sprechstimme für die gesamte Syntheseanforderung an. Die Sprechstimmlage ist der Tonfall der Sprache, die der Dienst synthetisiert. Sie gibt an, wie hoch oder tief der Ton der Stimme vom Hörer wahrgenommen wird. Eine höhere Tonhöhe führt dazu, dass die Sprache in einem höheren Ton gesprochen wird; eine niedrigere Tonhöhe führt dazu, dass die Sprache in einem tieferen Ton gesprochen wird. Der Parameter ändert die Standardtonhöhe pro Stimme für eine gesamte Anfrage. Weitere Informationen finden Sie unter Ändern der Sprechstimmlage.

spell_out_mode (Abfrageparameter, optionale Zeichenfolge)

Gibt bei deutschen Stimmen an, wie die einzelnen Zeichen einer Zeichenkette geschrieben werden sollen. Standardmäßig buchstabiert der Dienst die einzelnen Zeichen in der gleichen Geschwindigkeit, in der er den Text für eine Sprache synthetisiert. Mit diesem Parameter können Sie den Dienst anweisen, einzelne Zeichen langsamer zu buchstabieren, in Gruppen von einem singles), zwei pairs) oder drei triples). Weitere Informationen finden Sie unter Festlegen der Schreibweise von Zeichenfolgen.

X-Watson-Metadata (Anforderungsheader, optionale Zeichenfolge)

Ordnet einer Kunden-ID Daten zu, die mit einer Anforderung übergeben werden. Weitere Informationen finden Sie unter Informationssicherheit.

X-Watson-Learning-Opt-Out (Anforderungsheader, optionaler boolescher Wert)

IBM Cloud Gibt an, ob der Dienst Anforderungs- und Antwortdaten protokolliert, um den Dienst für zukünftige Benutzer zu verbessern. Wenn Sie nicht zulassen möchten, dass Ihre Daten von IBM für die allgemeine Verbesserung des Service verwendet werden, geben Sie für diesen Parameter true an. Durch Ihre Ablehnung wird IBM angewiesen, keine Benutzerdaten (Text oder Audiodaten) für Ihre Anforderung auf Platte zu schreiben. Sie können sich auch auf der Ebene des Kontos abmelden. Weitere Informationen finden Sie im Abschnitt Anforderungsprotokollierung.

Falls die Eingabe für die Methode /v1/synthesize einen ungültigen Abfrageparameter oder ein ungültiges JSON-Feld enthält, gibt der Service einen Antwortheader namens Warnings zurück, in dem jedes ungültige Argument beschrieben und aufgeführt ist. Die Anforderung wird ungeachtet der Warnungen erfolgreich ausgeführt.

Eingabetext angeben

Sowohl die Methode POST als auch die Methode GET /v1/synthesize akzeptieren einfachen Eingabetext und Text, dem SSML-Annotationen hinzugefügt wurden. Die beiden Versionen unterscheiden sich in erster Linie dadurch, dass der zu synthetisierende Text unterschiedlich angegeben wird. In den folgenden Beispielen wird der einfache Text Hello world übergeben.

  • Die Methode POST /v1/synthesize akzeptiert Eingabetext im Hauptteil der Anforderung. Sie geben die Eingabe mit einem einfachen JSON-Konstrukt an, das einfachen Text oder SSML enthält. Außerdem müssen Sie den Wert application/json für den Header Content-Type angeben.

    IBM Cloud

    curl -X POST -u "apikey:{apikey}" \
    --header "Content-Type: application/json" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    --data "{\"text\":\"Hello world\"}" \
    "{url}/v1/synthesize?voice=en-US_MichaelV3Voice"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X POST \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    --data "{\"text\":\"Hello world\"}" \
    "{url}/v1/synthesize?voice=en-US_MichaelV3Voice"
    
  • Die Methode GET /v1/synthesize akzeptiert Eingabetext, der durch den Abfrageparameter text angegeben wird. Sie geben die Eingabe als einfachen Text oder SSML an. In beiden Fällen ist eine Codierung als URL erforderlich.

    IBM Cloud

    curl -X GET -u "apikey:{apikey}" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    "{url}/v1/synthesize?text=Hello%20world&voice=en-US_MichaelV3Voice"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X GET \
    --header "Authorization: Bearer {token}" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    "{url}/v1/synthesize?text=Hello%20world&voice=en-US_MichaelV3Voice"""
    

Die Methoden POST und GET bieten zwar eine gleichwertige Funktionalität, die Übergabe von Eingabetext mit der Methode POST an den Service ist jedoch aus Gründen der Sicherheit vorzuziehen. Bei einer Anforderung POST wird die Eingabe im Hauptteil der Anforderung übergeben. Bei einer Anforderung GET werden die Daten über die URL offengelegt.

Interpunktion für Eingabetext

Schreiben Sie Text für die Synthese mit der Zeichensetzung, die Sie normalerweise verwenden würden. Fügen Sie beispielsweise Kommas, Punkte, Ausrufezeichen und Fragezeichen wie sonst üblich ein.

Der Service berücksichtigt die Zeichensetzung bei der Synthetisierung von Text. Kommas und Satzzeichen am Satzende wirken sich beispielsweise insofern auf die Audiodaten aus, als durch sie Pausen an entsprechenden Stellen in der synthetisierten Aussprache eingefügt werden. Satzzeichen am Satzende wie Punkte, Ausrufezeichen und Fragezeichen ändern auch die Satzmelodie und den Tonfall im gesprochenen Text. Sie können diese Aspekte der Aussprache auch mithilfe von SSML-Elementen beeinflussen.

SSML-Eingabe angeben

SSML (Speech Synthesis Markup Language) ist eine XML-basierte Markup-Sprache, die zur Bereitstellung von Annotationen bei Text für Sprachsyntheseanwendungen wie dem Text to Speech-Service konzipiert ist. Mithilfe der SSML-Elemente und ihrer Attribute können Sie die Synthese und die resultierende Audioausgabe stärker steuern.

Weitere Informationen zur Verwendung von SSML zum Hinzufügen von Annotationen zum Eingabetext finden Sie in Erläuterungen zu SSML. Eine Auflistung der unterstützten Elemente und Attribute finden Sie unter SSML-Elemente.

XML-Steuerzeichen mit Escapezeichen versehen

Da Sie Eingabetext übergeben können, der XML-basierte SSML-Annotationen enthält, validiert der Service die gesamte Eingabe, um sicherzustellen, dass alle SSML-Angaben gültig und korrekt formatiert sind. Aus diesem Grund müssen Sie alle im Eingabetext vorhandenen XML-Steuerzeichen mit Escapezeichen versehen, und zwar unabhängig davon, ob die Eingabe SSML enthält. Verwenden Sie anstelle der angegebenen Zeichen die äquivalenten Escapezeichenfolgen oder Zeichencodierungen, die in Tabelle 1 aufgeführt sind.

XML-Steuerzeichen mit Escapezeichen versehen
Zeichen Escapezeichenfolgen Zeichencodierung
"
(doppelte Anführungszeichen)
" "
'
(Hochkomma oder einfaches Anführungszeichen)
' '
&
(Et-Zeichen)
& &
<
(linke spitze Klammer)
&lt; &#60;
>
(rechte spitze Klammer)
&gt; &#62;
/
(Schrägstrich)
Keine &#47;

Weitere Informationen zur Validierung von Eingabetext durch den Service finden Sie unter SSML-Validierung.

Beispiele für Eingabetext

Die folgenden Beispiele zeigen, wie Eingabetext mit einer der beiden Methoden der HTTP-Schnittstelle angegeben wird. Sie veranschaulichen außerdem, wie XML-Steuerzeichen mit Escapezeichen versehen werden. Zur besseren Lesbarkeit enthalten die Beispiele Zeilenumbrüche. Nehmen Sie in den tatsächlichen Eingabetext keine Zeilenumbrüche auf.

Beispieleingabe mit GET-Anforderung

Die folgenden Beispiele übergeben eine URL-codierte Eingabe mit dem Abfrageparameter text der Methode GET /v1/synthesize:

  • Einfacher Eingabetext:

    text=This&20is&20the&20first&20sentence&20of&20the&20paragraph.&20Here
    &20is&20another&20sentence.&20Finally,&20this&20is&20the&20last&20sentence.
    
  • SSML-Eingabetext:

    text=%22%3Cp%3E%3Cs%3EThis%20is%20the%20first%20sentence%20of%20the%20%3C
    break%20time=%225s%22/%3E%20paragraph.%3C/s%3E%3Cs%3EHere%20is%20another
    %20sentence.%3C/s%3E%3Cs%3EFinally,%20this%20is%20the%20last%20sentence.
    %3C/s%3E%3C/p%3E%22
    

Beispieleingabe mit POST-Anforderung

Die folgenden Beispiele übergeben eine Eingabe im Hauptteil der Methode POST /v1/synthesize:

  • Einfacher Eingabetext:

    {
      "text": "This is the first sentence of the paragraph. Here is another
        sentence. Finally, this is the last sentence."
    }
    
  • SSML-Eingabetext:

    {
      "text": "<p><s>This is the first sentence of the <break time=\"5s\"/>
        paragraph.</s><s>Here is another sentence.</s><s>Finally, this is
        the last sentence.</s></p>"
    }
    

Beispieleingabe mit XML-Steuerzeichen

Die folgenden Beispiele senden zwei Sätze an die Methode POST /v1/synthesize. In den Beispielen sind die eingebetteten XML-Zeichen ordnungsgemäß mit Escapezeichen versehen.

"What have I learned?" he asked. "Everything!"
  • Einfacher Eingabetext:

    {
      "text": ""What have I learned?" he asked. "Everything!""
    }
    
  • SSML-Eingabetext:

    {
      "text": "<s>"What have I learned?" he asked.
        "<prodody rate=\"50\">Everything!</prosody>"</s>"
    }